Android Activity生命周期解析
序言
Activity 用户可以做单一的、集中的事情。几乎所有的Activity都与用户进行交互,所以Activity类负责创建一个窗口,你可以通过调用setContentView(View)把你的UI布局放置在Activity的窗口中。作为四大组件之一,使用频率非常高。深入了解Activity,对于我们高质量开发是很有帮助的,下面我们就来看看Activity的生命周期。
正文
Android系统中是通过Activity栈的方式来管理Activity的,而Activity自身则是通过生命周期的方法来管理的自己的创建与销毁。那么我们就来看看Activity生命周期是怎样运作的。
1. 生命周期简介
周期即活动从开始到结束所经历的各种状态。生命周期即活动从开始到结束所经历的各个状态。从一个状态到另一个状态的转变,从无到有再到无,这样一个过程中所经历的状态就叫做生命周期。
Acitivity本质上有四种状态:
-
Running(运行):
Activity处于活动状态,此时Activity处于栈顶,是可见状态,可与用户进行交互。 -
Paused(暂停):
当Activity失去焦点时,或被一个新的非全屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。此时Activity只是失去了与用户交互的能力,其所有的状态信息及其成员变量都还存在,只有在系统内存紧张的情况下,才有可能被系统回收掉。 -
Stopped(停止):
当一个Activity被另一个Activity完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时它不再可见,但是跟Paused状态一样保持着其所有状态信息及其成员变量。 -
Killed(销毁):
当Activity被系统回收掉时,Activity就处于Killed状态。
在上面的四中常有的状态之间,还有着其他的生命周期来作为不同状态之间的过度,用于在不同的状态之间进行转换。
2. 生命周期状态
我们先来看看下面这张经典的生命周期流程图:
Activity生命周期流程图-
onCreate():
该方法表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中可以做一些初始化的工作(加载布局资源、初始化Activity所需要的数据等),耗时的工作在异步线程上完成。 -
onStart():
该方法表示Activity正在被启动,并且即将开始。此时Activity已处于可见状态,只是还没有在前台显示,因此无法与用户进行交互。这个时候要注意它与onResume的区别:两者都表示Activity可见,但是onStart时用户还看不到界面,onResume可以看到界面。 -
onRestart():
该方法表示Activity正在重新启动。当前Activity从不可见重新变为可见的状态时,onRestart就会被调用。这种情形一般是由于用户的行为所导致的,比如用户按下Home键切换到桌面或者打开了一个新的Activity时,当前Activity会被暂停(onPause和onStop被执行),接着又回到当前Activity页面时,onRestart方法就会被回调。 -
onResume():
该方法表示Activity已经创建完成,并且可以开始活动了,这个时候用户已经可以看到界面了,并且即将与用户交互(完成该周期之后便可以响应用户的交互事件了)。 -
onPause():
该方法表示Activity正在暂停,一般情况下onStop接着就会被调用。在特殊情况下,如果这个时候用户快速地再回到当前的Activity,那么onResume会被调用。在onPause方法中我们可以做一些存储数据、停止动画的工作或者资源回收的操作,但是不能太耗时,因为这可能会影响到新Activity的显示。onPause必须执行完,新的Activity的onResume才会执行。 -
onStop():
该方法一般在onPause方法执行完成直接执行,表示Activity即将停止,此时Activity不可见,仅在后台运行。同样地,在onStop方法可以做一些资源释放的操作(不能太耗时)。 -
onDestroy():
该方法表示Activity即将被销毁,也是生命周期最后一个执行的方法,我们可以做一些回收工作和最终的资源释放(如Service、BroadReceiver、Map等)。
3. 生命周期调用
1)启动Activity
onCreate() —> onStart() —> onResume()
2)按Home键回到桌面 / 锁屏
onPause() —> onStop()
3)从桌面回到Activity / 解锁
onRestart() —> onStart() —> onResume()
4)跳转新Activity
A:onPause() —> onStop()
B:onCreate() —> onStart() —> onResume()
A —> B:onPause()_A —> onCreate()_B —> onStart()_B —> onResume()_B —> onStop()_A
5)返回上一个Activity
B:onPause() —> onStop() —> onDestroy()
A:onRestart() —> onStart() —> onResume()
B —> A:onPause()_B —> onRestart()_A —> onStart()_A —> onResume()_A —> onStop()_B —> onDestroy()_B
6)退出Activity
onPause() —> onStop() —> onDestroy()
参考
Activity官方文档
http://www.android-doc.com/reference/android/app/Activity.html
结语
至此Activity的整个生命周期都介绍完了,现在我们再看之前的生命周期流程图,是不是清晰许多。搞清楚Activity活动原理,这样理解起来就会容易许多,工作中也能如鱼得水。