如何处理Android内存管理和onTrimMemory回调?

时间:2016-03-07 20:33:36

标签: android memory-management android-memory

我有一个具有大量实例属性的自定义Application类,并且活动依赖于此属性。有时当活动在后台并且我打开应用程序时,会发生一些空指针异常。我知道这个问题的原因是Android正在杀死应用程序。当我打开应用程序时,会再次创建当前活动,但现在Application属性为null。

我有两种方法可以解决这个问题。当级别为TRIM_MEMORY_MODERATE或更高级别时,两种解决方案都需要onTrimMemory方法来清除应用程序缓存。

1º - 清除缓存并打开应用程序后,如果所需的Application属性为null,则当前活动结束。只有主活动才会再次加载Application属性。这需要较少的工作,因为最重构将发生在主要活动中。

2º - 每次Application属性为null时,重构所有活动以从后端加载所有必需的数据。在这里,我有很多工作,因为所有活动必须是独立的,必须知道如何加载自己的数据。

处理此Android行为的最佳方法是什么?你怎么解决这个问题?当从自定义Application类中清除缓存数据时,我需要做些什么来阻止这个空指针?

1 个答案:

答案 0 :(得分:0)

我对您的数据存储库架构了解不多,但您应遵循以下规则:

  1. TRIM_MEMORY_BACKGROUND - 尝试删除所有大致需要的资源,您知道不需要重新开始活动的事情
  2. TRIM_MEMORY_MODERATE - 您还可以清除一些可以由Loader或某些AsyncTask轻松加载的Activity所需资源
  3. TRIM_MEMORY_COMPLETE - 您可以考虑清除Application类中的几乎所有内容,并且只保留应用程序启动并正确恢复活动状态所需的最少数据。
  4. 除了上述3以外,我还建议您使用TRIM_MEMORY_UI_HIDDEN,这意味着您不再可以看到Activity,并且您可以在活动中缓存大型UI相关资源,尤其是Bitmaps :)。