普通的Activity跳转生命周期变化
-
MainActivity 启动
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume()
-
跳转到 SecondActivity
D/LUtil: MainActivity onPause() D/LUtil: SecondActivity onCreate() D/LUtil: SecondActivity onStart() D/LUtil: SecondActivity onResume() D/LUtil: MainActivity onStop()
-
SecondActivity 返回
D/LUtil: SecondActivity onPause() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() D/LUtil: SecondActivity onStop() D/LUtil: SecondActivity onDestroy()
-
MainActivity 返回
D/LUtil: MainActivity onPause() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy()
finish() 函数在不同生命周期方法中的调用
-
onCreate() 中调用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onDestroy()
-
onStart() 中调用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy()
-
onResume() 中调用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() D/LUtil: MainActivity onPause() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy()
Activity 跳转时 finish() 函数调用
-
onPause() 中调用
// MainActivity启动 D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() // 点击跳转Button D/LUtil: MainActivity onPause() D/LUtil: SecondActivity onCreate() D/LUtil: SecondActivity onStart() D/LUtil: SecondActivity onResume() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy() // 按返回键 D/LUtil: SecondActivity onPause() D/LUtil: SecondActivity onStop() D/LUtil: SecondActivity onDestroy()
-
onStop() 中调用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() // 点击跳转Button D/LUtil: MainActivity onPause() D/LUtil: SecondActivity onCreate() D/LUtil: SecondActivity onStart() D/LUtil: SecondActivity onResume() D/LUtil: MainActivity onStop() // 按返回键 D/LUtil: SecondActivity onPause() D/LUtil: SecondActivity onStop() D/LUtil: SecondActivity onDestroy() D/LUtil: MainActivity onDestroy()
Activity 生命周期
-
onCreate()
首次创建 Activity 时调用。 您应该在此方法中执行所有正常的静态设置 — 创建视图、将数据绑定到列表等等。 系统向此方法传递一个 Bundle 对象,其中包含 Activity 的上一状态(保存的状态),不过前提是保存了该状态。始终后接 onStart()。
-
onRestart()
在 Activity 已停止并即将再次启动前调用。始终后接 onStart()
-
onStart()
在 Activity 即将对用户可见之前调用。(可见而用户没有焦点)
如果 Activity 转入前台,则后接 onResume(),如果 Activity 转入隐藏状态,则后接 onStop()。 -
onResume()
在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。
始终后接 onPause()。 -
onPause()
当系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。
如果 Activity 返回前台,则后接 onResume(),如果 Activity 转入对用户不可见状态,则后接 onStop()。 -
onStop()
在 Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就可能发生这种情况。
如果 Activity 恢复与用户的交互,则后接 onRestart(),如果 Activity 被销毁,则后接 onDestroy()。 -
onDestroy()
在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。 当 Activity 结束(有人对 Activity 调用了 finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 您可以通过 isFinishing() 方法区分这两种情形。
这些方法共同定义 Activity 的整个生命周期。您可以通过实现这些方法监控 Activity 生命周期中的三个嵌套循环:
Activity 的整个生命周期发生在 onCreate() 调用与 onDestroy() 调用之间。您的 Activity 应在 onCreate() 中执行“全局”状态设置(例如定义布局),并释放 onDestroy() 中的所有其余资源。例如,如果您的 Activity 有一个在后台运行的线程,用于从网络上下载数据,它可能会在 onCreate() 中创建该线程,然后在 onDestroy() 中停止该线程。
Activity 的可见生命周期发生在 onStart() 调用与 onStop() 调用之间。在这段时间,用户可以在屏幕上看到 Activity 并与其交互。 例如,当一个新 Activity 启动,并且此 Activity 不再可见时,系统会调用 onStop()。您可以在调用这两个方法之间保留向用户显示 Activity 所需的资源。 例如,您可以在 onStart() 中注册一个 BroadcastReceiver 以监控影响 UI 的变化,并在用户无法再看到您显示的内容时在 onStop() 中将其取消注册。在 Activity 的整个生命周期,当 Activity 在对用户可见和隐藏两种状态中交替变化时,系统可能会多次调用 onStart() 和 onStop()。
Activity 的前台生命周期发生在 onResume() 调用与 onPause() 调用之间。在这段时间,Activity 位于屏幕上的所有其他 Activity 之前,并具有用户输入焦点。 Activity 可频繁转入和转出前台 — 例如,当设备转入休眠状态或出现对话框时,系统会调用 onPause()。 由于此状态可能经常发生转变,因此这两个方法中应采用适度轻量级的代码,以避免因转变速度慢而让用户等待。
管理 Activity 生命周期
通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要。 Activity 的生命周期会直接受到 Activity 与其他 Activity、其任务及返回栈的关联性的影响。
Activity 基本上以三种状态存在:
-
运行中
此 Activity 位于屏幕前台并具有用户焦点。
-
暂停
另一个 Activity 位于屏幕前台并具有用户焦点,但此 Activity 仍可见。也就是说,另一个 Activity 显示在此 Activity 上方,并且该 Activity 部分透明或未覆盖整个屏幕。 暂停的 Activity 处于完全活动状态(Activity 对象保留在内存中,它保留了所有状态和成员信息,并与窗口管理器保持连接),但在内存极度不足的情况下,可能会被系统终止。
-
停止
该 Activity 被另一个 Activity 完全遮盖(该 Activity 目前位于“后台”)。 已停止的 Activity 同样仍处于活动状态(Activity 对象保留在内存中,它保留了所有状态和成员信息,但未与窗口管理器连接)。 不过,它对用户不再可见,在他处需要内存时可能会被系统终止。
如果 Activity 处于暂停或停止状态,系统可通过要求其结束(调用其 finish() 方法)或直接终止其进程,将其从内存中删除。(将其结束或终止后)再次打开 Activity 时,必须重建。