1、activity的生命周期
activity的生命周期分为两个部分内容:
第一部分内容是典型情况下的生命周期,是指在用户参与的情况下,activity所经过的生命周期的改变
第二部分内容是异常情况下的生命周期,是指activity被系统回收或者由于当前设备的配置发生改变导致activity被销毁重建
2、典型情况下生命周期
onCreate:表示acitivity正在创建,在这个方法中我们可以做一些初始化的操作,例如加载布局资源和初始化acitivity所需数据等
onRestart:表示activity正在重启,一般情况下,当当前activity从不可见重新变为可见状态时,onRestart就会被调用.例如,用户按home键切换到桌面或者用户打开一个新的activity,接着用户又回到了这个activity,就会出现这种情况
onStart:表示activity正在启动,此时,activity已经可见,但是在后台,还不能与用户交互,
onResume:表示activity正在运行,此时,activity已经可见了,并且位于前台,可与用户交互
onPause:表示activity处于暂停状态,可见不可操作;正常情况下,接着会调用onStop方法,特殊情况下,当用户立即回到此activity时,会调用onResume方法;此时可以做一些停止动画,存储数据等操作,不能太耗时,因为会影响新activity的显示
onStop:表示activi处于停止状态,不可见,此时可以做一些稍微重量级的回收操作
onDestroy:表示activity即将被销毁,可以做一些回收工作和最终的资源释放
补充:
- 针对一个特定的activity,第一次启动,回调如下:onCreate onStart onPause
- 当用户打开新的activity或者切换到桌面时,回调如下:onPause onStop,如果新的activity采用的是透明主题,则不会调用onStop方法
- 当用户再次回到原activity时,回调如下:onRestart onStart onResume
- 当用户按back键后退时,回调如下:onPause onStop onDestroy
- 从整个生命周期来看,onCreate和onDestroy是配对的,分别标识着acticity的创建和销毁,并且只能调用一次;onStart和onStop是配对的,分别标识着activity的可见和不可见,可能会被调用多次;onResume和onPause是配对的,分别标识着activity可操作和不可操作
问题:
(1)onStart和onResume、onPause和onStop从描述上来看差不多,对我们来说有什么实质的不同呢?
答:onStart和onStop是从activity是否可见的角度来回调,onResume和onPause是从activity是否位于前台的角度来回调的
(2)假设当前activity为A,如果这时用户打开activityB,那么B的onResume和A的onPause那个先执行?
答:A的onPause会先执行,在源码中,新activity启动之前,栈顶的activity会需要先onPause
3、异常情况下的生命周期
(1)资源相关的系统配置发生改变导致activity被杀死并重新创建
当activity被杀死回调方法为:onPause onSaveInstanceState onStop onDestroy ; onSaveInstanceState 方法在onStop 之前调用,与onPause 并没有具体的前后之分;
当activity被重新创建回调方法为:onCreate onStart onRestoreInstanceState,onRestoreInstanceState接收到onSaveInstanceState 保存的bundle对象,从bundle对象中获取数据并恢复
onSaveInstanceState 和onRestoreInstanceState在正常情况下不会被调用;
(2)内存不足导致低优先级的activity被杀死