3

我一直在使用此答案中描述的方法: 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 上效果更好,但我仍然不确定我是否做得正确。特别是那些事情我不清楚:

  1. 为什么这个问题有一个stackoverflow的答案,虽然它不正确,但它被提高了8倍?
  2. 我正在使用 Runtime.getRuntime().totalMemory() 来检索应用程序当前使用的内存,它在我的 S3 上运行良好,但是 totalMemory() 的 API 描述确实告诉我一些完全不同的东西:“返回总量正在运行的程序可用的内存。” 这是为什么?
  3. 我的方法也适用于 Android 2.x 吗?
4

0 回答 0