在遇到这个问题几天后,我终于找到了办法。
问:如何通过转动手机或第二次打开活动来显示大型位图,而无需在VM预算上运行应用程序?
答案 0 :(得分:1)
BitmapFactory.Options option = new BitmapFactory.Options();
option.inSampleSize = 2;
bm = BitmapFactory.decodeFile(new File(path));
ImageView imageview =(ImageView)findViewById(R.id.imageView1);
imageview .setImageBitmap(bm);
答案 1 :(得分:1)
使用Bitmaps后始终调用bitmap.recycle()方法。调用GC不是解决方案,不能保证它会被调用。而且,在不调用循环方法的情况下,位图在使用后不会被释放。
options.inScaled = true;
options.inPurgeable = true;
options.inInputSharable = true;
如果这也无法解决您的问题,请尝试使用WeakReferences:Bitmap, Bitmap.recycle(), WeakReferences, and Garbage Collection
如果这也不起作用,那么代码中可能会有其他内存泄漏。在eclipse中使用MAT来查找代码中的内存泄漏。
答案 2 :(得分:0)
答:在使用以下方法显示之前,你必须稍微调整一下图片:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 3; // If number equals 3, it is only showing one third of all pixels. May crash if you are using 2, but 2 works in most cases.
Bitmap bMap = BitmapFactory.decodeFile((sdcard/exaple_file)), options);
Drawable d =new BitmapDrawable(bMap);
myLinearLayout.setBackgroundDrawable(d);
在onPause中:
@Override
protected void onPause() {
super.onPause();
System.gc();
}
// Some say that you should never call system gc your self, but for me it helps with stability.
这解决了我的问题,但可能不是100%最优。但它会阻止虚拟机预算中的应用程序崩溃。