0

在为这个问题苦苦挣扎了几天之后,我终于找到了解决办法。

Q:如何在不消耗虚拟机预算的情况下通过转动手机或第二次打开Activity来显示一个大的位图?

4

3 回答 3

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);
于 2012-06-05T10:24:13.533 回答
1

使用位图后总是调用 bitmap.recycle() 方法。调用GC不是解决办法,不保证会被调用。而且,如果不调用回收方法,位图在使用后不会被释放。

options.inScaled = true;
options.inPurgeable = true;
options.inInputSharable = true;

如果这也不能解决您的问题,请尝试使用 Wea​​kReferences:Bitmap、Bitmap.recycle()、WeakReferences 和 Garbage Collection

如果这也不起作用,那么您的代码中可能存在其他一些内存泄漏。在 Eclipse 中使用 MAT 找出代码中的内存泄漏。

于 2012-06-05T10:25:41.037 回答
0

A: 在显示图片之前,您必须先对图片进行一些压缩:

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% 最佳的。但它会阻止应用程序在 VM 预算上崩溃。

于 2012-06-05T10:15:25.987 回答