Activity常用到的生命周期方法包括:onCreate、onstart、onResume、onRestart、onPause、onStop、onDestroy七种;
另外还有两个Activity被异常销毁恢复的生命周期方法:onSaveInstanceState、onRestoreInstanceState
下面从不同环境条件下分析执行的生命周期方法:
(1):第一次启动某一Activity
onCreate----->onstart----->onResume
(2):从当前Activity跳转到某一Activity或者按下Home键
onPause----->onStop
(3):再次回到原来的Activity
onRestart----->onStart----->onResume
那么将(2)和(3)连起来理解就有一个问题出现了,再次返回原先Activity是先执行原先Activity的onResume方法呢,还是先执行当 前Activity的onPause方法呢?这个有点涉及到Activity栈的知识,你想想肯定是现在的Activity在栈顶了,那肯定是先执行当前 Activity的onPause方法了,这样他暂停之后才会执行栈内其他Activity的onResume方法了;
(4):在当前Activity界面按下Back键
onPause----->onStop----->onDestroy
(5):在当前Activity界面按下锁屏键进行锁屏操作
onPause----->onStop
(6):从锁屏状态返回到之前的Activity
onRestart----->onStart----->onResume
(7):在当前Activity窗体中以弹窗的形式显示另一个Activity只会执行当前Activity的onPause方法,并不会执行onStop方法,如果此时点击Back键退出弹窗Activity显示出原先的 Activity,则直接执行onResume方法,连onRestart与onStart方法都不执行;
(8):在当前Activty上通过按钮点击的形式弹出一个AlertDialog窗体,发现根本不会对Activity生命周期有任何影响,说明一点,AlertDialog其实是附在Activity上面的;
(9):接下来说说onSaveInstanceState与onRestoreInstanceState,这两个生命周期方法和onStop和onStart方法的执行顺序是:
但是onSaveInstanceState和onPause之间是没有先后关系的;
如果我们的Activity被异常关闭,比如你进行了横竖屏切换或者当前Activity因为优先级比较低被系统杀死,系统就会调用 onSaveInstanceState进行Activity状态的保存,比如说Edittext里面的值或者你ListView上面滑动到哪个Item 信息,当该Activity重新创建的时候就会调用onRestoreInstanceState方法恢复之前在onSaveInstanceState里面的数据了,注意的是onSaveInstanceState方法仅仅会出现在Activity被异常关闭的情况下,正常情况下是不会执行这个方法的,也就是正常情况下我们通过onCreate创建Activity的时候,他的Bundle参数是null的;
关于Activity生命周期的一点总结:
onCreate和onDestroy是一对相对的方法,分别标志Activity的创建和销毁;onStart和onStop是一对相对的方法,表示Activity是否可见;onPause和onResume是一对相对的方法,表示Activity是否处于前台;在正常的销毁Activity情况下是不会执行onSaveInstanceState的;