什么时候应该在android中处理Bitmap内存管理或回收位图?
例如,在Android中创建位图的方法很少,如下面的
Bitmap.createBitmap
Bitmap.createScaledBitmap
BitmapFactory
但是当android为位图分配内存时必须将其清除,以便在将来的应用程序中我们不会遇到内存不足的错误问题
答案 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
。
`