4

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

所以我正在关注关于 Activity 生命周期的教程。在链接的文章中,它说:

在正常的应用程序使用过程中,前台 Activity 有时会受到其他可视组件的阻碍,从而导致 Activity 暂停。例如,当一个半透明的活动打开时(例如对话框样式的活动),前一个活动会暂停。只要活动仍然部分可见但当前不是焦点活动,它就会保持暂停。

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

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

Activity A状态变为已停止的唯一时间是当我从Activity B的布局中单击“启动 C”时。

为什么会这样?是因为较新的 Android 版本上存在一些优化还是我误解了这篇文章?

截屏

4

1 回答 1

8

这是我通过艰难的方式学到的东西——谷歌的 Android 文档并不完全准确!

有时,系统会优化某些似乎偏离文档的行为。确切地知道某事是如何工作的唯一方法是通过艰苦的方式 - 通过挖掘源头

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

我发现处理这个问题的最好方法是找出谷歌向开发人员承诺的合同并坚持下去。例如,在这种情况下,合约说如果你遵循规则,在需要的时候实现所需的生命周期回调,那么它就会起作用,你不需要确切知道在什么情况下调用onStop(), onSaveInstanceState(),onPause()等。onDestroy()

换句话说,如果您通过实现在应用暂停时做了需要做的事情onPause(),那么您不需要确切知道您的活动何时会暂停。暂停/恢复由系统控制,并且可能会因版本而异(如果他们选择自定义此行为,甚至可能会因制造商而异)。

希望有人在我开始时告诉我这一点。这会为我节省很多时间和挫败感。希望这可以帮助。

于 2012-12-29T18:57:39.867 回答