Android:内存不足时静态变量null

Mat*_*euC 25 memory static android low-memory

我有一个应用程序,它有一些静态变量.这些变量存储在一个名为DataContext的独立类中.这些变量在应用程序启动时从原始文件初始化(在MyApplication的onCreate()中调用名为DataContext.initConstant()的方法,该方法扩展了Application).

(编辑:initConstant方法使用AsyncTask从文件加载此数据).

当我的应用程序在后台运行一段时间或者我的应用程序用于大量内存时,这些静态变量将变为null.

  1. 如何预防?

  2. 如果不是我应该怎么做我的静态变量?

    我有其他数据存储在静态变量中以用于不同的活动,但我清除它们或在onLowMemory()MyApplication 中将它们传递给null .

  3. 如果这些数据太大而无法在Intent中序列化,数据库无法使用(无论出于何种原因),并且无法通过序列化存储在文件中,那么在活动之间保持一些数据可访问的最佳方法是什么?

Ebo*_*ike 5

  1. 你不能。Android 需要不时释放内存。想象一下,如果所有应用程序都有大量应该永久驻留的静态数据 - 您将如何将其放入内存中?这是一部手机。它没有虚拟内存。

  2. (和 3):任何旨在持久化的内容都需要通过 SharedPreferences、Sqlite 数据库或文件进行存储。


Che*_*mon 5

最有可能的问题是您的应用程序在后台被杀死,然后在您返回时重新创建.查看活动生命周期文档,了解单个活动何时可能发生这种情况.您需要确保将存储在内存中的任何内容移动到正确的时间点,以避免在应用程序被杀死时丢失该信息.

我不确定你究竟存储了什么,但听起来好像使用共享首选项可能效果很好.此数据存储页面解释了许多不同的永久存储数据的方法,包括共享首选项.

  • 应用程序不会被终止,因为如果是这样,我的静态变量将被重新创建,因为如果应用程序被销毁,那么当重新创建它时,将调用 MyApplication 的 onCreate() 方法。 (2认同)