为什么Android数据应该在onPause()-onResume()中提交/读取,而不是在onStop()-onSta



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

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

也许这两种方法都合适吗?这里提供的文件仅仅是一个指南吗?

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

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

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

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

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

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

最新更新