【发布时间】:2021-05-22 00:43:15
【问题描述】:
我在某些地方看到可以(甚至建议)在 onPause() 方法中持久化数据。
喜欢这里
https://stackoverflow.com/a/41778266/3913107
这里
https://stackoverflow.com/a/29496430/3913107
但是,文档指出:
onPause() 执行时间很短,而且不一定负担得起 足够的时间来执行保存操作。为此,您应该 不要使用 onPause() 来保存应用程序或用户数据,建立网络 调用或执行数据库事务;此类工作可能无法完成 在方法完成之前。相反,您应该执行重负载 onStop() 期间的关闭操作
https://developer.android.com/guide/components/activities/activity-lifecycle#onpause
我错过了什么?
【问题讨论】:
-
如果您使用 MVVM 进行开发,您的视图模型/模型层无论如何都不应该感知生命周期。最佳做法是尽快存储持久数据,以免在您的应用进程突然终止时丢失。
-
@Pawel 这种观点有点幼稚。首先,MVVM 并不总是最好的模式,只有少数应用程序使用它。其次,不断地将模型写入存储会导致大量写入,这可能会成为性能瓶颈。此外,不断写入闪存会加速存储设备的故障。如果您在每次更改视图模型时都编写它,那么您可能做错了。
-
@GabeSechan 在大多数情况下,“持久化数据”归结为仅将用户交互导致的(增量)更新写入数据库,因此理想情况下您希望它们尽快存储。除非查询真的很幼稚(例如每次写入数千条记录),否则这不会真正导致任何瓶颈或大量存储磨损。只有在一些更不常见的情况下(比如编辑文件),我会考虑在
onPause期间定期保存 w/额外的保存触发器。 -
@GabeSechan 在这一点上,我们只是在争论什么是“更新” - 如果任何 OP 正在寻找通用答案,如果没有至少一点关于他试图坚持的内容的背景信息就无法提供.我的观点是不要仅仅依赖生命周期方法(最好完全不依赖它们),因为如果应用程序崩溃或以其他方式中断,它会导致数据丢失。
-
@Pawel 我的观点是要依赖生命周期方法,不要照你说的做。在一般情况下,可能有特定的 tikmes 可以。实际上,数据丢失的唯一风险是在崩溃的情况下。如果您有适当的测试,应该很少发生它不应该关心您。