Activity Lifecycle:为什么设置为“Paused”而不是“Stopped”

时间:2012-12-29 18:26:33

标签: android android-lifecycle

为了让我在假期忙碌,我决定学习Android开发。

所以我关注一个Activity的生命周期tutorial。在链接的文章中,它说:

  

在正常的应用程序使用期间,前景活动有时会受阻   由导致活动暂停的其他可视组件。对于   例如,当半透明活动打开时(例如   对话框的样式),之前的活动暂停。只要了   活动仍然部分可见,但目前不是活动   焦点,它仍然暂停。

     

但是,一旦活动完全阻挡且不可见,它就会出现   停止(将在下一课中讨论)。

我下载了示例应用。示例应用程序有3个活动,每个活动都有按钮,可以从Intent启动其他活动。当我点击“开始B”时,我预计Activity A的状态应该是“已停止”,因为它现在被Activity B的布局完全阻挡了。但是,它被设置为“暂停”。

Activity A状态变为停止的唯一时间是我从Activity B的布局点击“开始C”。

为什么会这样?是因为新版Android上出现了一些优化,还是我误解了这篇文章?

Screenshot

1 个答案:

答案 0 :(得分:8)

这是我学到的一些难题 - 谷歌的Android文档对于所有内容都不准确!

有时,系统会优化某些似乎偏离文档的行为。唯一能够确切知道某些事情是如何运作的方法是通过挖掘source来实现的。!

如果您的应用依赖于某些系统级别的行为,例如停止和暂停按照宣传的特定顺序工作,那么您将很难。此行为由系统控制,不提供任何保证。

我发现解决这个问题的最好方法是找出谷歌向开发商承诺的合同并坚持下去。例如,在这种情况下,合同表明,如果您遵循规则,在需要时实施所需的生命周期回调,那么它将起作用,并且您不需要确切知道在什么情况下调用onStop()onSaveInstanceState()onPause()onDestroy()等。

换句话说,如果您执行onPause()暂停应用程序时需要执行的操作,那么您无需确切知道您的活动何时暂停。暂停/恢复由系统控制,并且可能会因版本而异(或者如果他们选择自定义此行为,甚至可能从制造商更改为制造商)。

希望有人在我开始时告诉我这件事。这本来可以节省我很多时间和挫折。希望这会有所帮助。