我正在为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仍然有空白空间,堆大小将继续扩展,这意味着也许堆仍然可以扩展分配的内存,但是我不知道不知道那是否可能。
您怎么看?
答案 0 :(得分:0)
您可以检查activityManager.isLowRamDevice()函数以及memoryInfo.lowMemory。这会给你一个指示