在安卓中,一个Activity实例初始化代码都是被特定的回调方法(callback method)调用的,而不是像其他程序一样从main()启动,这些回调方法与该Activity所处的生命周期(lifecycle)的阶段有关。一个Activity从建立到消亡的过程中,有一系列的回调方法来管理它。



理解生命周期回调方法



在activity的生命过程中,安卓系统将调用一系列的生命周期回调方法,这些方法组成了一个生命周期“金字塔”,如Figure 1所示。Activity的每一个生命阶段都是这个生命周期“金字塔”中的独立一级。当系统创建了一个新的Activity的实例之后,每一个回调方法将推动这个activity的状态一步一步走向“金字塔”的顶端。这个“金字塔”的顶端就是该activity前端显示,并且用户能够和该activity交互。



android compose 生命周期感知 android什么是生命周期_Android



Figure 1.Activity 生命周期“金字塔”示意图。这张图展示了每个回调方法如何一步一步将activity推向“金字塔”顶端——Resumed状态。当然还有一些回调方法是将activity推下“金字塔”的。处于Paused和Stopped状态的activity也能够回到Resumed状态。(图片来自

 Android Develop Traning Starting an Activity



当用户离开这个activity时,为了能够销毁这个activity,系统将调用其他回调方法推动activity的状态走下“金字塔”。在有些情况中,activity只是走到“金字塔”的中间,并等待用户(例如,当用户切换到其他app时)。在“金字塔”中间时,activity能重新回到“金字塔”的顶端(如果用户切换回到这个activity),并从用户暂离时的地方继续。



你可以选择不实现所有的生命周期方法,当然这取决于你的Activity的复杂性。然而,弄懂、实现每一个方法有利于你的app运行良好。正确实现你的Activity的方法确保你的app运行正常,需要注意:


  • 如果用户收到来电或者切换到别的app,你的app不会崩溃。
  • 当用户离开一个Activity后,它不会继续消耗宝贵的系统资源。
  • 用户暂时离开Activity时,请不要丢失用户离开前的进度。
  • 用户在竖屏、横屏之间切换时,确保Activity不会崩溃或者丢失用户进度。

接下来的博客将会介绍Activity状态转换的情形。Figure 1中展示了生命周期的不同状态,然而其中只有三个状态是静态的,即,只有这三个状态中的某一个状态能维持一段时间:



  • Resumed

在这个状态下,Activity是前段显示的,用户能够与之交互。(有时又被称作“Running”状态)


  • Paused

在这个状态下,Activity被其他Activity部分遮挡,例如其他前端显示的Activity是半透明的或者没有全屏覆盖。处于Paused状态下的Activity不能够接受用户输入,也不能执 行任何代码。


  • Stopped

在这个状态下,Activity是完全被隐藏的,对用户来说该Activity是不可见的。处于Stopped状态的Activity仍然能够保持其状态信息(例如,成员变量),但是不会执行任何的代码。


其他状态(Created和Started)都是瞬时状态,系统将通过调用相应的回调方法,很快的将处于这两个状态的Activity推进向下一个生命周期状态。当系统调用onCreate()后,将很快地调用onStart(),紧接着将调用onResume()。