文档建议应在onPause()
/ onResume()
中提交/阅读数据。
然而,当应用程序不再处于前台时,其数据结构保持不变,这表明可以延迟提交/读取数据,直到应用程序不再可见,即在onStop()
/ {{1} }。特别是因为保证在onStart()
之前调用onStop()
。
这两种方法都适合吗?文档在这里只是一个指导原则吗?
更新
假设您的应用程序需要保存相对较多的数据,比如对大图像进行编辑。然后肯定会在onDestroy()
/ onPause()
中不写/读,以免用户体验变得迟钝。在这种情况下,应该选择在onResume()
/ onStop()
中写入/读取。这是真的吗?
答案 0 :(得分:4)
使用onStop
的问题在于,您无法保证何时调用它,因为唯一确定的是它将在onDestroy
之前调用。如果您等到onStop
提交数据,则可能会延迟其他活动显示/使用任何这些更改。同样的事情适用于onStart
,如果它只是在后台,您的活动可能不需要重新启动,因此您将拥有过时的数据。使用onResume
和onPause
可确保您的数据始终是最新的,只要活动进入后台就会进行提交,并且一旦新数据变为可见,就会立即加载新数据。
答案 1 :(得分:3)
是的,它只是一个指南(通常是一个很好的指南)。当您想要提交更改时,完全取决于您。我个人喜欢创建允许简化数据库或SharedPreferences的Store Objects,并且在进行更改时,我会立即提交这些更改。对于简单的数据存储,这对用户来说是快速且不可见的。对于大型数据集,这可能需要更多时间,您可能希望在时间间隔和onPause中进行这些写入。
至于何时阅读 - 你可以随时阅读,但是更长的阅读时间往往会影响用户体验,除非你在另一个线程中处理它,例如使用AsyncTask。
要进一步回答您的更新:
这取决于开发人员,但我会在onPause()
中编写,如果需要,可以在单独的线程中读取,可能使用onResume()
进行初始化。我也可以使用Timer
线程在预定的时间间隔内写出数据,具体取决于它将如何影响当前会话的用户体验,以及如果手机关闭并丢失所有数据将是灾难性的onPause()
被称为。{/ p>
答案 2 :(得分:0)
对此的真正答案是,onPause是唯一可以保证在Android 破坏您的流程之前调用的方法。如果用户离开您的应用程序接听电话,并且Android决定关闭您的流程,则完全合法,只能获得onPause电话。如果您没有在那里保存状态,当用户点击后退按钮时,您将最终以与用户不同的状态重新创建您的活动。