activity是安卓的四大组件之一,这篇文章带大家一起总结生命周期的各个方法。我没有贴一些打印log的代码,大家可以自己去尝试,看看这个总结是否正确,如果错误,提交评论即可。
经典的生命周期流程图

每次看到这个图的时候,相信不少朋友对Activity的生命周期都比较清晰,但是如果没有图,让你描述,你能很好的组织语音,有结构的描述清楚吗?
我的总结
- 1、打开一个全新的activityA:oncreat-----onstart---onresume
- 2、从activityA——activityB(全屏):activityA先执行onpause,然后activityA执行oncreat-----onstart---onresume,activityA在执行onstop
- 3、从activityA——activityB(非全屏):activityA先执行onpause,然后activityA执行oncreat-----onstart---onresume,activityA不会执行onstop
- 4、activityB(全屏)返回到activityA:activityB先执行onpause,activityA: onRestart -> onStart ->onResume,activityB在执行onstop——onDestory;
- 5、activityB(非全屏)返回到activityA:activityB先执行onpause,activityA:onResume,activityB在执行onstop——onDestory;
- 6、activityB返回到activityA:如果activityA已经被销毁,activityA会重新创建,执行oncreat-----onstart---onresume,activityB的流程不变
7、activityA按home键退居后台:同2的流程,从home返回到activityA,同4的流程;
一些特殊的方法
onWindowFocusChanged:
在Activity窗口获得或失去焦点时被调用并且当Activity被创建时是在onResume之后被调用,当Activity被覆盖或者退居后台或者当前Activity退出时,它是在onPause之后被调用(在这个方法中可以view已经绘制完成,可以获取view的宽高等属性)onSaveInstanceState:
(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用;(2)在用户改变屏幕方向时,此方法会被调用;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View组件的状态。onSaveInstanceState的调用顺序是在onstop之前。(android3.0之前:在onPause之前调用,在3.0之后,在onPause之后调用)onRestoreInstanceState:
有的人说这个方法和onSaveInstanceState是一对,其实不然,(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。(在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时:onRestoreInstanceState不会调用,但是onSaveInstanceState会调用,这里就是区别)最后的总结
当Activity被系统撤销后重新建立时,保存以及恢复数据的函数调用顺序是:onSaveInstanceState(保存数据)-->onCreate(恢复数据allstate)-->onRestoryInstanceState(恢复数据HierarchyState)。
如果要取消切换屏幕方法重建activity,可以配置configChanges属性:
android:configChanges="keyboardHidden|orientation|screenSize(当支持的最小sdk版本大于android4.0需要设置这个属性)"