3

文档建议数据应该在 / 中提交/onPause()读取onResume()

然而,当应用程序不再处于前台时,其数据结构保持不变,这表明可以延迟提交/读取数据,直到应用程序不再可见,即在onStop()/中onStart()。特别是因为onStop()保证在之前被调用onDestroy()

两种方法都适合吗?此处提供的文档仅仅是指导吗?

更新 假设您的应用程序需要保存相对大量的数据,例如对大图像的编辑。然后肯定不会onPause()在/中写入/读取onResume(),以免用户体验变得迟缓。在这种情况下,人们会选择写入/读取onStop()/ onStart()。真的吗?

4

3 回答 3

4

using 的问题onStop是您无法保证何时调用它,因为唯一确定的是它会在之前调用onDestroy。如果您等到onStop提交数据,则其他活动显示/使用任何这些更改可能为时已晚。同样的事情适用于onStart,如果您的活动只是在后台,则可能不需要重新启动它,因此您将拥有过时的数据。使用onResumeonPause保证您的数据始终是最新的,一旦活动进入后台,就会进行提交,并在新数据可见时立即加载。

于 2013-02-21T17:40:49.697 回答
3

是的,这只是一个指导方针(通常是一个很好的指导方针)。何时提交更改完全取决于您。我个人喜欢创建允许简化数据库或 SharedPreferences 的存储对象,并且当进行更改时,我会立即提交这些更改。对于简单的数据存储,这对用户来说将是快速且不可见的。对于大型数据集,这可能需要更多时间,您可能希望在某个时间间隔以及 onPause 中进行这些写入。

至于何时阅读 - 您可以随时阅读,但较长的阅读通常会影响用户体验,除非您已在另一个线程中处理它,例如使用 AsyncTask。

进一步回答您的更新: 这取决于开发人员,但是我会写入并在onPause()必要时读取一个单独的线程,可能使用onResume(). 我还可以使用线程在预定的时间间隔内写出数据Timer,具体取决于它将如何影响当前会话的用户体验,以及电话关闭并在onPause()调用之前丢失所有数据是否会是灾难性的。

于 2013-02-21T17:37:52.833 回答
0

真正的答案是,onPause 是保证在 Android破坏您的进程之前调用的唯一方法。如果用户离开您的应用程序接听电话,并且 Android 决定关闭您的进程,那么您只接到 onPause 电话是完全合法的。如果你没有在那里保存你的状态,当用户点击后退按钮时,你最终会以不同于用户离开它的状态重新创建你的活动。

于 2013-02-21T18:11:01.937 回答