Activity是开发人员接触最多的,也是用户直接交互的组件。废话不多说直接上它的生命周期图[如下]
![](https://img.haomeiwen.com/i10708696/be6772f63abab4d3.png)
![](https://img.haomeiwen.com/i10708696/f3ec475860c0cf02.png)
典型情况下的生命周期分析
列举两种实例如下:
当用户再次回到原Activity时: onRestart onStart onResume
当用户按back键回退时:onPause onStop onDestory
拓展:
(1)onStart和onResume, onPause和onStop 在描述上来看都差不多,对我们来说有什么实质的不同呢?
答:onStart和onStop是从Actvity是否可见这个角度来回调的。
onResume和onPause是从Activity是否位于前台这个角度来回调的。
除了这种区别在实际使用中没有其他明显区分。
从实际使用过程来说onStart和onResume, onPause和onStop开起来的确差不多甚至我们可以只保留其中一对。
(2)假设当前为Activity_A 如果这是用户打开一个新的 Activity_B, 那么B的onResume和A的onPause哪个先调用(执行)呢?
答:旧的Actvity[ _A ]先onPause, 然后新的Actvity[ _B ]在启动(我们可以查看源码或敲代码实验一下)
异常情况下的生命周期分析
情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建
咋一看很抽象,我们举一个简单的例子, "比如说,当前Activity处于竖屏状态,突然旋转屏幕。由于系统配置发生改变,在默认情况下,Activity就会被异常销毁并重新创建(其实我们可以阻止系统去重新创建这个Activity,这里暂不考虑)“
Activity先被异常销毁: onPause onSaveInstanceState onStop onDestroy
Activity在从新生成:onCteate onStart onRestoreInstanceState onResume
注意:
(1)Activity正常销毁情况下 onSaveInstanceState 它是不会被调用的
(2)Activity可以指定configChanges属性来捕获手机状态改变,来控制是否让系统重新创建新页面 android:configChanges="orientation | screenSize" 参数如下
![](https://img.haomeiwen.com/i10708696/9fb1eb7610da6a53.png)
情况2:资源内存不足导致低优先级的Activity被杀死
/*Activity按照优先级从高到低,可以分为三种:
(1)前台Activity---正在和用户交互的Activity, 优先级最高
(2)可见但非前台Activity---比如在当前Activity上浮着一个Dialog对话框,这个Activity可见但是位于后台无法和用户直接交互
(3)后台Activity---已经被暂停的Activity,比如执行了onStop, 优先级最低*/
当系统内存不足时,系统就会按照Activity的优先级去杀死目标Activity所在的进程,并在后续通过 onSaveInstanceState 和 onRestoreInstanceState 来存储和恢复数据
网友评论