【发布时间】:2012-09-29 11:17:55
【问题描述】:
我正在开发一个包含 10 多个活动的 Android 应用程序。我有一些状态对象,我几乎在每个活动中都可以访问它们,为此,它们在 MyApplication 类中实现为全局静态变量。
我注意到,只要用户“在”应用程序中,这种方法就可以了。但是,当他按下主页按钮并打开另一个应用程序,然后通过“最近的活动”按钮返回我的应用程序时,我看到 Android 系统从 MyApplication 重置了静态,所以我必须处理 NullPointerExceptions。我知道这种行为是由Android杀死并重新创建应用程序进程引起的。
我知道保存此类数据的最佳方法是使用 SharedPreferences 或 SQLite,并且我在 onCreate for 中检查 MyState==null 并恢复它没有问题,但问题是我不知道when 正确存储我的状态对象(在首选项或数据库中)。我试图覆盖 MyApplication 的 finalize() - 不好,我看到 onLowMemory 可能不会被调用,我不知道如何使用 onPause、OnStop 等,因为我有太多的活动,序列化反序列化会相当多减慢应用速度。
有什么想法吗? 提前致谢!
【问题讨论】:
-
如果数据量不大,请将持久化对象设为 Singleton。
-
那么当Android OS会重新创建应用进程,因此重新创建Application类这个Object会恢复它的状态?
-
重新启动/重新创建应用程序进程取决于几个因素,例如内存、实时应用程序数量、当前运行的服务数量等。因此,将您的数据保存在销毁的主要活动中或销毁的应用中。
-
好点,但根据此处的文档link,一般建议是:“不要指望此方法被称为保存数据的地方”。据我了解,无法保证此方法会被调用。
-
确实如此,但很少发生。如果您想要更多控制权,请在暂停的活动中的适当时间保存数据,保存在已保存的实例方法上。
标签: android object-persistence