在android中回收Bitmap

时间:2011-01-02 14:48:52

标签: android bitmap

什么时候应该在android中处理Bitmap内存管理或回收位图?

例如,在Android中创建位图的方法很少,如下面的

 Bitmap.createBitmap
 Bitmap.createScaledBitmap
 BitmapFactory

但是当android为位图分配内存时必须将其清除,以便在将来的应用程序中我们不会遇到内存不足的错误问题

2 个答案:

答案 0 :(得分:1)

在3.0之前的Android版本中,位图在VM外部分配。 Android在Bitmap的finalize()方法中获取此内存。您可以通过调用Bitmap.recycle()而不是等待GC调用它们上的finalize()来让Android更快地回收内存。

如果您正在创建和丢弃大量位图,这只是一个真正的问题。也就是说,如果你更快地分配内存,那么GC可以清理留下的垃圾,此时你会得到一个OutOfMemoryError。

在android 3.0及更高版本中,Bitmap内存是在VM内部分配的,因此可以回收Bitmap内存,而无需在它们上调用finalize()。

答案 1 :(得分:0)

您可以在不需要时回收位图。例如

@Override 
protected void onPause(){
    super.onPause();
    if(bitmap !=null){
        bitmap.recycle();
        bitmap = null;
    } 
}
@Override 
protected void onResume() {
    super.onResume();
   if(bitmap !=null){
        bitmap.recycle();
        bitmap = null;
  } 
}

P.S位图内存与每个设备的行为不同,我的意思是

Growing Heap

与设备不同 例如,在tested and confirmed by personal testing上,位图大小可以超过VM预算(增长堆)高达240MB,并且它不会导致OutOfMemoryError,但在某些其他设备中,如果位图大小超过(增长堆),则16MB它可能导致OutOfMemoryError从设备到另一个设备完全不同,因为有些设备有大堆而有些没有。并相信我处理成长堆并非易事。 其他建议是在清单内的android:largeHeap="true"标记中使用application。 `