在前面的文章中,已经创建好了一个用户演示Activity生命周期的示例,但是由于那篇文章篇幅过长,所以分成两部分来写,在这篇文章中,将详细介绍Activity的生命周期。
了解Activity的生命周期是非常有必要的,在后面的文章中会涉及到数据的保存(也就是持久化)等功能,而保存时机的选择关乎用户体验,而了解Activity的生命周期会对时机的选择有更好的理解。
在文档中,已经有了比较清晰的说明:
- 如果一个Activity显示在最前端,它的状态时active或者是running
- 如果一个Activity失去焦点,但是还能在屏幕上看到它,比如说,被一个非全屏的或者是透明的另一个Activity遮盖,它此时的状态是paused。一个处于paused状态的Activity,保持着所有自身的状态和信息,秉持着与window manager的联系,但是当系统内存不足时,可能会被系统终止
- 如果一个Activity完全看不见了,被其他的Activity完全挡住,它的状态变成stopped。处于stopped的Activity虽然也保留着如同paused状态一样的特性,但是此时的它更容易被系统终止
- 如果一个Activity处于paused或者stopped状态时,系统可以通过要求Activity结束或者强制kill的方式从内存中删除这个Activity,当它在此需要显示时,就需要restart和重新加载以前的数据。(可见,适时的保存数据的重要性)
用一个状态装换图来说明问题:
仔细品味这张图,和上面的说明,会很好的理解Activity的生命周期。接下来,用前面的示例程序来具体说明一下。在前面的示例程序中,写了很多空方法,方法中只是打印了一行日志,这些方法都是Activity在进行状态转换的时候要使用的方法。
- 程序启动
INFO/ActivityLifecycle: onCreate …
INFO/ActivityLifecycle: onStart …
INFO/ActivityLifecycle: onResume … - 点击一下第一个按钮,会弹出一个小对话框,主Activity在对话框的后面还是能看的见,此时的Activity的状态时paused
INFO/ActivityLifecycle: onPause … - 然后,点击一下模拟器的返回按键,小对话框消失,返回到主Activity
INFO/ActivityLifecycle: onResume … - 点击一下第二个按钮,一个新的Activity会代替当前的Activity
INFO/ActivityLifecycle: onPause …
INFO/ActivityLifecycle: onStop …
这时候,主Activity的状态就变成了stopped了 - 点击一下模拟器的返回按键,返回到主Activity
INFO/ActivityLifecycle: onRestart …
INFO/ActivityLifecycle: onStart …
INFO/ActivityLifecycle: onResume … - 再次点击一下模拟器的返回按键,退出程序
INFO/ActivityLifecycle: onPause …
INFO/ActivityLifecycle: onStop …
INFO/ActivityLifecycle: onDestroy …
注意一下第一个按钮和第二个按钮被点击之后,所执行的过程是不同的。然后可以进行各种组合的前进退出,通过观察日志了解Activity的生命周期。