我的活动非常小,必须显示图片。
如果图片不是很小(例如1.12 Mb 2560x1920),它会在更改屏幕方向上产生内存不足。我试过getDrawable.setCallback(null),但没有运气。
我哪里错了?
public class Fullscreen extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.gc();
setContentView(R.layout.fullscreen);
ImageView imageView = (ImageView) findViewById(R.id.full_screen_image);
long imageId = 2;
imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageId));
}
}
答案 0 :(得分:11)
尝试将此添加到onDestroy方法:
ImageView imageView = (ImageView) findViewById(R.id.full_screen_image);
BitmapDrawable bd = (BitmapDrawable)imageView.getDrawable();
bd.getBitmap().recycle();
imageView.setImageBitmap(null);
它将回收ImageView中使用的位图。
答案 1 :(得分:4)
使用更少的内存和缩减采样/调整大小(参见BitmapOptions#inSampleSize的文档)图片。
答案 2 :(得分:1)
您的申请必须泄露上下文。这通常是应用程序在多次方向更改后崩溃的原因。请仔细阅读http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html。
答案 3 :(得分:1)
您也可以使用以下内容:
File picture = new File("path_to_image");
if (picture.exists()) {
ImageView imageView = (ImageView)findViewById(R.id.imageView);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap myBitmap = BitmapFactory.decodeFile(picture.getAbsolutePath(), options);
imageView.setImageBitmap(myBitmap);
}
阅读以下链接,了解有关BitmapFactory选项的更多信息(特别是inSampleSize,它控制子采样的程度):http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html