oncreate() 表示activity正在被创建,这是生命周期的第一个方法,在这个方法里,我们可以做一些初始化工作,比如加载布局资源,初始化activity所需数据。
onStart() 表示activity正在被启动,此时activity已经可见了,但是还没有出现在前台,还无法和用户交互。
onResume() 表示activity已经可见了,并且处于在前台。
onPause() 表示activity正在停止,此时可以做一些存储数据、停止动画等工作,但注意不能太耗时。因为这会影响新activity的显示,onPause必须先执行完,新activity的onResume才能执行。
onStop() 表示activity即将停止,此时可以做一些重量级的回收工作,但同样不能太耗时。
onDestory() 表示activity即将被销毁,这是activity生命周期的最后一个回调,在这里,我们可以做一些回收工作和最终的资源释放。
onRestart() 表示activity正在重新启动。
典型情况下的生命周期分析
MainActivity和SecondActivity之间相互跳转,其生命周期过程的打印
(1) 启动MainActivity
myapplication D/MainActivity: onCreate:
myapplication D/MainActivity: onStart:
myapplication D/MainActivity: onResume:
(2) MainActivity启动SecondActivity
myapplication D/MainActivity: onPause:
myapplication D/SecondActivity: onCreate:
myapplication D/SecondActivity: onStart:
myapplication D/SecondActivity: onResume:
myapplication D/MainActivity: onStop:
(3)SecondActivity Back键返回
myapplication D/SecondActivity: onPause:
myapplication D/MainActivity: onRestart:
myapplication D/MainActivity: onStart:
myapplication D/MainActivity: onResume:
myapplication D/SecondActivity: onStop:
myapplication D/SecondActivity: onDestroy:
(4)MainActivity Back键返回
myapplication D/MainActivity: onPause:
myapplication D/MainActivity: onStop:
myapplication D/MainActivity: onDestroy:
异常情况下的生命周期分析
activity除了受用户操作所导致的正常的生命周期调度,还有一些异常情况,比如当资源相关的系统配置发生改变或者内存不足时,activity就可能会被杀死。我们不好模拟内存不足的情况,可以尝试修改系统配置来模拟异常情况。
当系统配置发生改变之后,activity就会被销毁并重新创建。其中onPause,onStop,onDestory都会被调用,同时由于activity是在异常情况下被销毁的,那么系统会调用onSaveInstanceState来保存当前activity的状态。需要强调的是,onSaveInstanceState方法只会出现在activity被异常终止的情况下,正常情况下系统不会回调这方法。当activity被重新创建后,系统会调用onRestoreInstanceState,并把activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法,因此我们可以通过onRestoreInstanceState和onCreate方法来判断activity是否被重建了,如果被重建了,那么我们就可以取出之前保存的数据并恢复,从时序上来说,onRestoreInstanceState的调用时机在onStart之后。
现在我们来模拟一下系统配置发生改变之后的MainActivity的生命周期过程
MainActivity启动之后,切换横竖屏
myapplication D/MainActivity: onPause:
myapplication D/MainActivity: onStop:
myapplication D/MainActivity: onSaveInstanceState:
myapplication D/MainActivity: onDestroy:
myapplication D/MainActivity: onCreate:
myapplication D/MainActivity: onStart:
myapplication D/MainActivity: onRestoreInstanceState:
myapplication D/MainActivity: onResume: