检测低内存的最佳方法是什么?

时间:2018-07-16 14:14:15

标签: android android-library android-memory

我正在为Android构建一个库,并试图通过在内存不足时禁用某些功能来避免OutOfMemory错误

我有两种解决方案,但实际上我对哪个更好更好感到困惑

第一个是通过在lowMemory中使用ActivityManager.MemoryInfo布尔值来表示的。

public static boolean isLowMemory(Context context) {
    if (context != null) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();

        if (activityManager != null) {
            activityManager.getMemoryInfo(memoryInfo);
            return memoryInfo.lowMemory;
        }
    }

    return true;
}

另一种方法是使用Runtime

public static boolean isLowMemory() {
    final Runtime runtime = Runtime.getRuntime();
    final long usedMemInMB = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L;
    final long maxHeapSizeInMB = runtime.maxMemory() / 1048576L;
    final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;
    return availHeapSizeInMB < 10;
}

我相信这应该获取应用程序本身的内存,但是我要担心的是,如果Ram仍然有空白空间,堆大小将继续扩展,这意味着也许堆仍然可以扩展分配的内存,但是我不知道不知道那是否可能。

您怎么看?

1 个答案:

答案 0 :(得分:0)

您可以检查activityManager.isLowRamDevice()函数以及memoryInfo.lowMemory。这会给你一个指示