android:如何在没有OutOfMemory异常的情况下检查是否可以加载图像

时间:2013-01-12 17:02:57

标签: android memory-management

我一直在使用此答案中描述的方法: 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吗?

0 个答案:

没有答案