4

我正在开发一个包含 10 多个活动的 Android 应用程序。我有一些状态对象,我几乎在每个活动中都可以访问它们,为此,它们在 MyApplication 类中实现为全局静态变量。

我注意到只要用户在应用程序中,这种方法就可以了。但是,当他按下主页按钮并打开另一个应用程序,然后通过“最近的活动”按钮返回我的应用程序时,我看到 Android 系统从 MyApplication 重置了静态,所以我必须处理 NullPointerExceptions。我知道这种行为是由Android杀死并重新创建应用程序进程引起的。

我知道保留此类数据的最佳方法是使用 SharedPreferences 或 SQLite,并且我在 onCreate for 中检查 MyState==null 并恢复它没有问题,但问题是我不知道何时正确存储我的状态对象(在首选项或数据库中)。我试图覆盖 MyApplication 的 finalize() - 不好,我看到 onLowMemory 可能不会被调用,我不知道如何使用 onPause、OnStop 等,因为我有太多的活动,序列化反序列化会相当多减慢应用程序。

有什么想法吗?提前致谢!

4

1 回答 1

2

Application除非您需要加载一些数据,否则最好不要依赖类,然后再开始其他任何操作。Android 可以随时终止您的进程以释放资源,因此您的应用程序应该能够处理此问题。将所有数据保存在 snigleton 类中,然后延迟加载——检查 null,如果是,则在首次访问时加载。如果状态需要保持不变,请考虑将其保存为文件/共享首选项。如果没有,您的应用程序可能没有它就可以生存,所以只需确保检查null等。

通常,您应该在活动变为非活动状态时保持状态 -- onStop(), onPause(),但您可以在有意义时立即保存(例如,用户输入了所有必需的数据)。分拆一个AsyncTask以在后台保存数据并让用户继续他们的工作。

于 2012-10-09T08:38:53.000 回答