何时将数据保存到数据库,onPause()或onStop()?

我知道这个问题已经被问了一百万次了,虽然我自己已经知道了答案,而且正确的答案是唯一的保证是onPause(),所以你应该保存你的数据。

然而,在Android文档的许多地方,他们总是build议不要在onPause()方法中做繁重的工作(如在数据库中写入数据),因为它会延迟活动之间的转换。

根据表1中的Android开发者指南

onPause():这个方法通常用来提交未保存的更改到持久数据,停止animation和其他可能消耗CPU的东西,等等。 它应该尽快做它,因为下一个活动将不会恢复,直到它返回。

Killable:是的

然后根据类似的表中的Android开发人员参考指南 。

它说同样的事情,但是:

Killable:Pre-HONEYCOMB

他们添加一点点说明:

请注意,这些语义会在针对HONEYCOMB平台的应用程序与针对以前平台的应用程序之间略有改变。 从Honeycomb开始,在onStop()返回之前,应用程序不处于killable状态 。 这会影响onSaveInstanceState(Bundle)的调用(可能会在onPause()之后安全地调用,并允许和应用程序安全地等到onStop()以保存持久状态。


Killable

注意上表中的“Killable”列 – 对于那些标记为可压缩的方法, 该方法返回之后 ,宿主活动的进程可能随时被系统杀死,而不会执行另一行代码。

对于POST-HONEYCOMB(我不在乎以前的版本):那么,假设任何Android设备(包括不同的ROMS)将确保在onStop上的活动调用是可以的吗? 这是使应用程序的任何时间储存写作的最佳地点?

注意:这是非常混乱的,因为这里的大多数答案,网站,书籍,甚至是在线的androidtesting都是正确的答案,您应该将其保存在onPause而不是onStop中。

Solutions Collecting From Web of "何时将数据保存到数据库,onPause()或onStop()?"

何时将数据保存到数据库,onPause()或onStop()?

无论是。 他们几乎是相同的,特别是在Android 3.0以上。

如果接pipe前台的活动是一个典型的全屏活动,那么以前的活动不再可见, onPause()onStop()将快速连续调用。

如果接pipe前台的活动更像是一个对话框,而早期的活动仍然可见,则将调用onPause() ,而不是onStop() ,直到活动不再可见为止(例如,用户现在按下HOME)。

大多数应用程序并不担心“主题更像是一个对话框”场景,在这种情况下, onPause()onStop()会在下一个之后被调用,并且可以派生后台线程来保存数据那些对你有意义。

然而,在Android文档的许多地方,他们总是build议不要在onPause()方法中做繁重的工作(如在数据库中写入数据),因为它会延迟活动之间的转换。

onStop()也是如此,因为在主应用程序线程上都调用了这两个方法。

那么,假设任何Android设备(包括不同的ROMS)都能确保在activity上调用onStop吗?

onPause()onStop()将从进程终止的angular度来看具有相同的特征。 要么两者都被称为(正常情况下)或者都不会被称为(例如,你崩溃,电池popup电话的背面)。

这是使应用程序的任何时间储存写作的最佳地点?

onPause()onStop()是触发工作的好地方,在后台线程上完成,保存你的数据。 如果你喜欢在onStop()做这个工作,那么绝对欢迎你这样做。 就我个人而言,我是一个onPause()类的人。

  • 如果你想要更安全,存储在onPause
  • 如果你的数据太大,你必须存储它几秒钟,你可能会打开一个后台Service (如IntentService )来保存。
  • 您也可以检查代码中的系统版本,并select何时保存。 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.ICE_CREAM_SANDWICH){}
  • 在大多数情况下,何时保存的规则不会被某些定制的操作系统改变。 但是当然可以有一些其他的操作系统肯定会改变它。 所以在android开发中最重要的是你需要知道在不同的手机中所有东西都是不一样的。