【发布时间】:2014-02-21 22:17:02
【问题描述】:
现在,我的应用正在使用单例类“UserData”来维护用户偏好和设置。每次进行更改时,我都会将所有数据保存到 JSON 文件中。所以,我所有的 setter 都调用 saveToFile()。
这工作得很好,但我只是不喜欢每次调用 setter 时都进行保存。我也宁愿不必在各种活动和片段中放置代码来调用方法来自己保存数据。
理想情况下,我希望单例在应用程序关闭(或关闭/销毁)时保存数据。我还有一个 Application 类,用于跨活动保留一些对象,但我没有看到应用程序关闭或被销毁时的回调。
有没有一种可靠的方法可以让单例知道它什么时候被销毁,这样它就可以在那个时候保存数据?我想确保它永远不会丢失对其用户数据的更改。
或者,有没有比使用单例更好的方法?
谢谢!
编辑:
SharedPreferences 不是一个好的选择,因为:
- 我要保存三个字符串数组列表,它们只添加了对 API 11+ 的支持。 JSON 可以很好地处理数组。
- 它做同样的事情,除了它将它保存为 XML 数据而不是 JSON。由于它将数据保存到一个文件中,因此每次更新字段时,它仍然必须一次保存整个内容。
- 我想我可以做得更好。
所以,我修改了我的实现,以便我的基 Activity 类覆盖 onStop() 以在我的 Singleton 中调用 onSave()。当一个字段被修改时,它会设置一个标志,并且只有在设置了该标志时才保存数据。
对 Singleton 的引用由我的 Application 类作为静态变量进行管理。它在应用程序启动时读取数据。
我还对其进行了修改以进行异步保存。
我不明白这怎么会失败,除非由于内存问题,Android 在没有调用任何生命周期方法的情况下终止了应用程序。
你怎么看?
【问题讨论】:
-
阅读此评论 Rick,您可能会感兴趣:stackoverflow.com/a/17278737/812598
-
@GoRoS,是的,我想是的。谢谢。
标签: android savestate application-singleton