我正在为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。这将给您一个指示