android - 检测内存不足的最佳方法是什么?
问题描述
我正在为 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 仍然有空白空间,堆大小将继续扩展,这意味着堆可能仍然可以扩展分配的内存,但我不知道如果这可能与否。
你怎么看?
解决方案
您可以检查 activityManager.isLowRamDevice() 函数以及 memoryInfo.lowMemory 。这会给你一个指示
推荐阅读
- python - 找到达到 n 所需的最小步数
- api - Search_tabs.json - Yammer API
- android - 添加的 EditText 不是 TextInputEditText。请改用该类。如何解决?
- c# - C# WPF - 输入验证 - 不能在文本框中使用小数点(句点)
- javascript - {JS} 返回 Promise { < Pending > }
- mysql - Spring Data JPA - 错误计数表的元素
- r - 要在 R 中列出的数据框中的 Json 对象
- ossec - 使用 OSSEC 检查 docker 中的文件完整性
- javascript - 递归搜索节点中指定目录名称的子目录
- swift - 如何从另一个类更改@Binding var?