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



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

我有两个解决方案,但实际上我很困惑哪一个是更好的

第一个是通过在ActivityManager.MemoryInfo中使用lowMemory布尔值。这一个给出了关于整个系统内存整体的指示

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仍然有空空间,堆的大小会继续缩放,这意味着堆可能仍然可以放大分配的内存,我不知道这是否可能。

你觉得怎么样?

您可以检查activityManager.isLowRamDevice((函数和memoryInfo.lowMemory。这将给您一个指示

相关内容

最新更新