Translated and edited the page Android Develop Traning Starting an Activity.
这篇博客将概略的介绍最重要的一些生命周期概念。
在安卓中,一个Activity实例初始化代码都是被特定的回调方法(callback method)调用的,而不是像其他程序一样从main()启动,这些回调方法与该Activity所处的生命周期(lifecycle)的阶段有关。一个Activity从建立到消亡的过程中,有一系列的回调方法来管理它。
理解生命周期回调方法
在activity的生命过程中,安卓系统将调用一系列的生命周期回调方法,这些方法组成了一个生命周期“金字塔”,如Figure 1所示。Activity的每一个生命阶段都是这个生命周期“金字塔”中的独立一级。当系统创建了一个新的Activity的实例之后,每一个回调方法将推动这个activity的状态一步一步走向“金字塔”的顶端。这个“金字塔”的顶端就是该activity前端显示,并且用户能够和该activity交互。
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不会崩溃或者丢失用户进度。
- Resumed
- Paused
- Stopped
在这个状态下,Activity是完全被隐藏的,对用户来说该Activity是不可见的。处于Stopped状态的Activity仍然能够保持其状态信息(例如,成员变量),但是不会执行任何的代码。
其他状态(Created和Started)都是瞬时状态,系统将通过调用相应的回调方法,很快的将处于这两个状态的Activity推进向下一个生命周期状态。当系统调用onCreate()后,将很快地调用onStart(),紧接着将调用onResume()。