我一直在使用此答案中描述的方法: https://stackoverflow.com/a/6893818/457059
以下是检查的行:
if ((reqsize + allocNativeHeap + heapPad) >= Runtime.getRuntime().maxMemory())
不幸的是,有时候我仍然以OutOfMemory Exceptions结束。所以我做了一些调试,并发现,在我的Galaxy S3(冰淇淋三明治)中,应用程序当前使用的内存不会被上面的方法考虑在内。
我的理论是上面的答案仅针对android 2.x及以下版本,其中图像保存在本机堆中。
我将支票更改为以下内容:
public static boolean checkBitmapFitsInMemory(long bmpwidth,long bmpheight, int bmpdensity ){
long required=bmpwidth*bmpheight*bmpdensity;
long allocated = Runtime.getRuntime().totalMemory() + Debug.getNativeHeapAllocatedSize() + Tools.getHeapPad();
if ((required + allocated) >= Runtime.getRuntime().maxMemory()) {
return false;
}
return true;
}
这在我的S3上运行得更好,但我仍然不确定我是否正确使用它。特别是那些事情对我来说并不清楚: