Activity生命周期理解
在Android应用程序运行时,Activity的活动状态由Android以Activity栈的形式管理,当前活动的Activity位于栈顶。随着应用程序之间的切换、关闭等,每个Activity都有可能从活动状态转入非活动状态,当然,也可以从非活动状态转入活动状态。
下面,我们借助一个关于Activity生命周期模型图进行理解。
从图中可以看出来,在Activity的生命周期中,会有如下方法会被系统回调:
-
void onCreate(Bundle savedInstanceState):创建Activity时会被回调。
-
void onStart():首次创建Activity时在onCreate方法之后执行,但会有另外一种情况,后面会进行分析,总之,就是启动Activity时被回调。
-
void onRestart():该活动在Activity没有被销毁时会一直存在Activity栈中,重新启动Activity时会被回调。
-
void onResume():用户在进行Activity切换时,恢复相应的Activity时回调。在void onStart()方法后一定会回调的方法。
-
void onPause():Activity被暂停时回调,活动会被压倒栈中。
-
void onStop():Activity被停止时回调。
-
void onDestroy():Activity被销毁时回调,完全从系统内存中移除。
总结归纳起来,Activity会有四种状态:
- 运行状态:当前Activity位于前台,用户可见,可以获得焦点。
- 暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。
- 停止状态:该Activity不可见,失去焦点。
- 销毁状态:该Activity结束,或Activity所在的进程被结束。
我通过程序测试得出Activity的7个方法会在何时进行回调。
- 当前程序入口为该Activity,当程序启动时将会自动启动并执行该Activity,会回调onCreate()、onStart()、onResume()三个方法回调,如图
- 当切换到程序的另外一个Activity时,MainActivity不能再获取焦点,但依然可见,此时该Activity进入“暂停”状态,会回调onPause()方法,如图
- 当返回从另外一个Activity返回到MainActivity时,该Activity会再次进入“运行”状态,会回调onStop()、onRestart()、onStart()、onResume()方法,如图
- 当直接按下home键返回系统桌面时,当前该Activity失去焦点,但并未销毁,只是进入“停止”状态,会回调onPause()、onStop()方法,如图
- 当再次从系统桌面进入程序时,会回调onRestart()、onStart()方法,如图
- 当直接退出程序时,会回调onPause()、onStop()、onDestroy()方法,如图
由以上实验得onCreate和onDestroy该方法在周期中只会被调用一次。