Android onSaveInstanceState()和onPause()调用序列

Android onSaveInstanceState()和onPause()调用序列,android,onpause,Android,Onpause,在onSaveInstanceState()上,状态为: 如果调用该方法,则总是在onStop()之前调用,也可能在onPause()之前调用 但是,我从日志消息中始终注意到,onPause()总是在onSaveInstanceState()之前调用。我在这两种方法中放置了日志消息。请帮助我了解在什么情况下,onSaveInstanceState()在onPause()之前被调用 环境:Android v4.0(API 14)+EclipseV3.7.1-Indigo。您可以阅读相关内容 简而言

onSaveInstanceState()上,状态为:

如果调用该方法,则总是在onStop()之前调用,也可能在onPause()之前调用

但是,我从日志消息中始终注意到,
onPause()
总是在
onSaveInstanceState()之前调用。我在这两种方法中放置了日志消息。请帮助我了解在什么情况下,
onSaveInstanceState()
onPause()之前被调用

环境:Android v4.0(API 14)+EclipseV3.7.1-Indigo。

您可以阅读相关内容

简而言之,您永远不可能知道onSaveInstanceState何时运行。

onSaveInstanceState()很好,但唯一保证的回调是onPause(),当您的活动失去焦点时调用。所以,在那里保存你的状态

请帮助我了解在什么情况下 在onPause()之前调用onSaveInstanceState()

pre-Honeycom和其他平台(自Honeycom之后)的活动生命周期存在差异:

API级别>=11:调用
onPause()
时,进程处于安全状态,无法终止


API级别<11:调用
onPause()
时,承载活动的进程将变得可终止。这意味着系统可以终止包含活动的进程,而无需执行任何其他代码行。因此,如果发生这种情况,
onSaveInstanceState()
可能永远不会被调用。为了避免这种情况,系统应在
onPause()
之前调用
onSaveInstanceState()
,否则您将无法保存用户状态。

请注意,仅对序列进行了澄清。关于保存到哪里,有很多好帖子。请注意,当活动失去焦点时,并不总是调用onSaveInstanceState()。有关更多信息,请参阅上述帖子中的链接和“保存活动状态”子主题@以保存捆绑包状态,您应该使用onSaveInstanceState。虽然onPause总是会被调用,但对于典型的bundle状态,在每次暂停时保存它是浪费的。如果可以在终止活动之前保存捆绑包状态,则将调用onSaveInstanceState,并且该调用将在onStop之前发生。当然,如果您确实需要在每次暂停活动时执行某些操作,那么onPause是正确的位置。永远不要在onPause.IMHO中保存状态,这里讨论的“状态”可能有两种不同的含义。onSaveInstanceState是一种在应用程序临时暂停期间保存一些UI状态的高性能方法,非常方便。不能保证它会被调用。(请参阅android开发人员的“活动”页面。)保留用户看到的UI状态只是一种方便。任何重要的事情都不要依赖它。猜测系统应该调用这两个调用的顺序是不相关的:重要的一点是,文档不能保证这两个调用发生在哪个顺序。尽管如此,这个答案(尽管它没有回答这个问题)在指出前11版本和后11版本之间的差异方面还是有些有用的。