2013-02-18 60 views
7

我对,onStoponSaveInstanceState中应该发生什么感到困惑。例如,Android的文档说 对于 -android-存储在onPause,onStop或onSaveInstanceState中的数据

提交未保存的更改,但前提是用户期望,当他们离开(如电子邮件草稿)将被永久保存这些变化。

对于onStop -

你应该使用的onStop()来执行更大,更多的CPU关机操作,比如到数据库中写入信息。

对于onSaveInstanceState

您的活动可能有你想恢复,如跟踪用户在作业进展成员变​​量更多的状态信息。

这不是真的,这三件事基本上是指存储信息,如表单或电子邮件?那么应该保存哪种方法?

回答

6

你想持久化的一切都必须存储在onPause()中,因为有些Android版本认为你的应用程序在返回onPause()之后是可用的。

由于onPause()发生的频率相对较高,并且在很多情况下您可能不会保存相同Activity的onResume()的状态,因此可能会造成某种程度上的不同。因此,在执行onPause()的昂贵操作之前,每个人都希望您三思。

有关存储表单数据的问题,当输入字段失去焦点时,如果用户看到相同的表单数据,甚至在他停止应用程序并重新启动应用程序后,您可以使其持久化。

+0

自从2016年1月开始,Honeycomb(3.0)占到Android设备的96.8%,因此''onStop()'保证会被调用。所以我更喜欢''onStop()'onPause()'来保存数据现在。 – 2016-01-06 09:11:44

+0

@VickyChijwani从软件工程的角度来看,_preferring_'onStop()'over onPause()'是不可接受的,除非你明确地在你的应用程序的元数据中(你没有提到)_require_ Android 3.0。 – 2016-01-06 09:52:15

+0

对,我确实为Android 3.0和更高版本制作了我的应用程序,应该提到这一点。我更喜欢onStop()的另一个原因是[onPause()'docs]中的这一行(http://developer.android.com/reference/android/app/Activity.html#onPause %28%29):“当活动B在活动A前面启动时,...... B将不会被创建,直到A的onPause()返回为止,所以一定不要在这里做任何冗长的事情。当然,整个生命周期文档仍然相当混乱,所以这不是确凿的。 – 2016-01-06 09:58:57

2

对于任何人在2016年或以后来到这里,请注意@Class Stacker的回答在这一点上已经过时了。具体来说,onStop()保证由于Android 3.0(蜂巢),占96.8% of Android devices为2016年一月

的见的生命周期文档这里被称为http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle(按Ctrl + F“未在killable状态”)

UPDATE:正如在评论中指出的那样,这当然意味着您的应用必须仅限于Android 3.0及更高版本。

+0

只是为了再次说明这一点(上面也有说明),百分比本身并不是一个足够的观点。一个不会解决'onPause()'中持久性问题的应用程序必须严格限制在Android 3及以上版本。 – 2016-01-06 13:11:17

相关问题