【问题标题】:Android Activity life cycle - onPause() and onResume()Android Activity 生命周期 - onPause() 和 onResume()
【发布时间】:2015-05-13 15:10:40
【问题描述】:
在Android developer diagram 中,我看到onResume() 总是在onPause() 之前调用。假设用户开始一个新的Activity,为什么onPause()前面要加上onResume()?
我的意思是:
OnResume 可以在 2 种情况下调用:
1) 当用户开始新的活动时(在 OnPause 之前)
2) 当活动在后台并且用户将活动带回
前景
我希望在任何情况下都应该做其他事情。
【问题讨论】:
标签:
android
activity-lifecycle
【解决方案1】:
你弄错了。无论何时创建一个活动,onResume 都会在 onStart 之后被调用。每当您的活动返回堆栈时,就会调用 onPause。如果您的活动再次回到前台,则调用 onResume。所以,它不像 onResume 在 onPause 之前被调用。每当活动从 onPause 状态返回时,就会调用 onResume 而不是 onStart 或 onCreate。发生这种情况是为了让 Android 不必一次又一次地创建 Activity 实例,尽管这些实例没有被正确销毁。这也非常节省内存。
注意:如果您的应用正在运行并且用户按下 返回 按钮或 主页 按钮,那么 Activity 将通过 onPause () 和 onStop() 状态。在此之后,如果用户再次回到您的应用,则将依次调用 onRestart()、onStart() 和 onResume() .
那么当 Activity 仅处于 onPause() 状态时? 当 dialog 出现在您的 Activity 之上或您的 Activity 处于 在分屏中显示,但没有焦点(用户未与您的应用交互)。在这些情况下,活动仅进入 onPause() 状态。
【解决方案2】:
activity的生命周期如下
- 通过 onCreate()、onStart()、onResume ... 重新开始并通过 onPause()->onStop()->onDestroy() 关闭
-
黄色背景:活动进入背景,因此不再可见。用户返回活动。
例如
- Activity运行时关闭手机屏幕:onPause()->onStop()
- 再次开启屏幕:onStart() -> onResume()
-
绿色背景:活动停留在可见屏幕区域但未激活
例如激活占据屏幕一部分的多个窗口(分屏)并提示您的应用以使其处于活动状态
- 关于其他应用的提示:在您的应用中调用 onPause(),因为它进入暂停状态但仍然可见
- 应用提示:onResume() 被调用
下面是一个有两个应用的分屏示例:
见android documentation on activity life cycle for details
【解决方案3】:
onResume() 总是在 onPause() 之前调用
这是正确的。 onResume 始终在第一次启动 Activity 时调用,在 onCreate 之前,以及当 Activity 恢复时(用户导航回您的 Activity)
假设用户开始一个新的Activity,为什么onPause()应该是
前面是onResume()
onPause 仅在 Activity 被置于后台时调用,或者在应用程序被销毁时在 onDestroy 之前调用。所以onPause总是在在调用onResume之后被调用。为什么?因为这就是 Android 框架定义的 Activity 的生命周期。