如何直接从SD卡显示位图而不会崩溃VM预算

时间:2012-06-05 10:15:26

标签: android bitmap sd-card

在遇到这个问题几天后,我终于找到了办法。

问:如何通过转动手机或第二次打开活动来显示大型位图,而无需在VM预算上运行应用程序?

3 个答案:

答案 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%最优。但它会阻止虚拟机预算中的应用程序崩溃。