Android 何时保存模型状态?

Android 何时保存模型状态?,android,Android,我的申请中有几个活动。他们都使用MySingleton读取和存储一些数据 在第一次访问时从文件加载单例的状态 状态经常变化 这个州并不小(~1MB) 这个单例类似于我的应用程序的模型 因此,我只想在停止所有活动之后,不再发生任何更改时将其存储到文件中。如何做到这一点?最终,由于潜在的应用程序崩溃/内存不足/电池耗尽的情况,存储离散状态更改将提供最佳的用户体验 也就是说,假设您处于一种不需要执行上述操作的情况下:您可以在每个活动恢复时使用粘性服务进行注册,在活动暂停时取消注册,如果没有其他注册

我的申请中有几个活动。他们都使用
MySingleton
读取和存储一些数据

  • 在第一次访问时从文件加载单例的状态
  • 状态经常变化
  • 这个州并不小(~1MB)
  • 这个单例类似于我的应用程序的模型

因此,我只想在停止所有活动之后,不再发生任何更改时将其存储到文件中。如何做到这一点?

最终,由于潜在的应用程序崩溃/内存不足/电池耗尽的情况,存储离散状态更改将提供最佳的用户体验


也就是说,假设您处于一种不需要执行上述操作的情况下:您可以在每个活动恢复时使用粘性服务进行注册,在活动暂停时取消注册,如果没有其他注册活动,则保存状态,最后停止服务。您还可以使用绑定来促进这种行为(例如绑定到服务,在最后一个绑定未绑定时保存状态)。

由于Android的性质及其进程和内存管理,您无法100%保证您的活动和应用程序将通过某些检查点,您可以在其中安全地存储您的状态


在我看来,最好的方法是在状态发生变化时存储这些变化。你的整个状态每次都会改变吗?可能只是其中的一部分。创建一个数据库,并只存储每次更改的内容-这将是您最安全的选择。

您不应该在“停止所有活动后”这样做,因为您无法控制它。您应该在每个活动中的
onPause()
中执行此操作,因为您不知道当应用程序进入后台时是否会被杀死。几小时前也有类似的讨论。只需根据活动生命周期编写代码,不要做假设,一切都会很酷。@Simon好的,但是20MB大小怎么样?Android指南建议避免在onPause()期间执行繁重的操作,并使用onStop()进行操作。另一方面,正如您所说,不会调用garanties onStop()。正确,
onStop()
不能使用。但是,究竟是什么让你保存为需要20MB的“状态”?