如何确定Android设备何时内存不足

时间:2012-03-21 11:34:17

标签: android multithreading memory process ram

我的应用是在前台运行的后台服务。在内存不足的情况下,我的一些处理线程在没有重新启动应用程序的情况下被杀死。这引起了非常奇怪的行为。在我的进程被杀死之前,当内存不足时,我希望被操作系统警告。这将允许我释放内存或重新启动我的应用程序。我无法为这种情况找到广播或通知。

2 个答案:

答案 0 :(得分:2)

  1. 在Android内部连续运行一个后台服务“DeviceStorageMonitorService”,它会定期检查系统存储目录。
  2. 此服务维护的内存阈值是指定内部系统内存的10%,因此在P2的情况下为861MB,因此内存阈值为86 MB。 我们可以通过更改文件DeviceStorageMonitorService.java中的宏DEFAULT_THRESHOLD_PERCENTAGE来更改此项。
  3. 它用内存阈值检查可用内存的大小,如果它小于阈值内存,它将广播通知和粘性广播意图ACTION_DEVICE_STORAGE_LOW。 如果是完全内存意图ACTION_DEVICE_STORAGE_FULL
  4. 在接收方接收此广播意图并处理该应用程序。

答案 1 :(得分:1)

我建议你阅读"管理应用程序的内存"在这里:https://developer.android.com/training/articles/memory.html。系统回调方法 onTrimMemory 将通知您不同的RAM使用情况,如方法参数的值所示。有关详细信息,请参阅https://developer.android.com/reference/android/content/ComponentCallbacks2.html#onTrimMemory(int)。该方法的描述如下:

  

当操作系统确定这是一个好时机时调用   用于从其进程中删除不需要的内存的进程。这将   例如,当它进入后台并且没有时发生   足够的内存来保持尽可能多的后台进程运行。   您永远不应该与级别的确切值进行比较,因为新的   可以添加中间值 - 您通常希望进行比较   如果该值大于或等于您感兴趣的级别。

     

要在任何时刻检索过程当前修剪级别,您可以使用   ActivityManager.getMyMemoryState(RunningAppProcessInfo)。

例如,TRIM_MEMORY_COMPLETE作为onTrimMemory的参数:

  

public static final int TRIM_MEMORY_COMPLETE等级    onTrimMemory (int):进程接近后台LRU列表的末尾,如果很快找到更多内存,它将会是   杀害。常数值:80(0x00000050)