首页 > 解决方案 > 检测内存不足的最佳方法是什么?

问题描述

我正在为 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 仍然有空白空间,堆大小将继续扩展,这意味着堆可能仍然可以扩展分配的内存,但我不知道如果这可能与否。

你怎么看?

标签: androidandroid-libraryandroid-memory

解决方案


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


推荐阅读