android 如何直接从SD卡显示位图,而不浪费虚拟机预算

fhg3lkii  于 2023-02-27  发布在  Android
关注(0)|答案(2)|浏览(105)

我为这个问题苦苦思索了几天,终于找到了解决的办法。
问:如何显示大位图,而又不占用应用的虚拟机预算,方法是将手机转过来或第二次打开Activity?

jm81lzqq

jm81lzqq1#

使用Bitmaps后一定要调用bitmap.recycle()方法。调用GC不是解决方案,不能保证它一定会被调用。另外,如果不调用recycle方法,位图在使用后不会被释放。

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

如果这也不能解决您的问题,请尝试使用WeakReferences:Bitmap, Bitmap.recycle(), WeakReferences, and Garbage Collection
如果这也不起作用,那么可能在你的代码中有其他的内存泄漏。使用eclipse中的MAT来找出你代码中的内存泄漏。

icomxhvb

icomxhvb2#

在显示图片之前,您必须使用以下命令将图片缩小一点:

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预算上的应用程序崩溃。

相关问题