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