我正在开发一个包含10多个活动的Android应用程序。我在几乎每个活动中都有一些状态对象,为此,它们在MyApplication类中作为全局静态变量实现。
我注意到只要用户“在”应用程序中,这种方法就可以了。但是,当他按下主页按钮并打开另一个应用程序然后通过“最近活动”按钮返回我的应用程序时,我看到Android系统重置了MyApplication中的静态,因此我必须处理NullPointerExceptions。我知道这种行为是由Android杀死并重新创建应用程序进程引起的。
我知道保留此类数据的最佳方法是使用SharedPreferences或SQLite,我在onCreate中检查MyState == null是否有问题并进行恢复,但问题是我不知道何时以正确存储我的状态对象(在prefs或数据库中)。我试图覆盖MyApplication的finalize() - 没有好处,我看到onLowMemory可能没有调用,我看不出如何使用onPause,OnStop等等因为我有很多活动,序列化反序列化会相当大放慢应用程序。
有什么想法? 提前谢谢!
答案 0 :(得分:2)
最好不要依赖Application
类,除非您需要在启动其他任何内容之前加载一些数据。 Android可以随时终止您的进程以释放资源,因此您的应用应该能够处理此问题。将所有数据保存在snigleton类中,然后懒惰地加载它 - 检查是否为null,如果是,则加载第一次访问。它需要持久化状态,考虑将其保存为文件/共享首选项。如果没有,您的应用可能没有它,所以只需确保检查null
等等。
通常,您应该在活动变为非活动状态时保持状态 - onStop()
,onPause()
,但您可以在有意义时立即保存(例如,用户输入了所有必需的数据)。关闭AsyncTask
以在后台保存数据并让用户继续工作。