Android开发艺术探索读书笔记(一):Activity生命周期

来源:互联网 发布:软件著作权申请表 编辑:程序博客网 时间:2024/05/22 00:18

Activity生命周期

·典型情况下的生命周期

——有用户参与的情况下,Activity所经过的生命周期的改变。

具体如下图:


 

注意:

onStart()onResume():前者执行时Activity还在后台,无法和用户进行交互;后者执行时Activity显示到前台。

②当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause -> onStop。特殊情况:新Activity采用透明主题,那么当前Activity不会回调onStop

onStartonStop是从Activity是否可见的角度来回调的,而onResumeonPause是从Activity是否位于前台的角度来回调的。

④栈顶的Activity需要先onPause后,新Activity才能启动。

onPauseonStop都不能执行耗时的操作,尤其是onPause,应尽量在onStop中做操作,才能使新的Activity尽快显示出来并切换到前台。

·异常情况下的生命周期

——Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建。


情况1

资源相关的系统配置发生改变导致Activity被杀死并重新创建。如横竖屏的切换。

默认情况下,当系统配置发生改变后,Activity就会被销毁并重新创建,如下:

 

①在onStop之前(可能在onPause之前或之后)调用onSaveInstanceState来保存当前Activity的状态,只会在Activity被异常终止的情况下出现该方法。

②当Activity被重新创建后,系统会调用onRestoreInstanceState,把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceStateonCreate方法。

③在上述两个方法中,判断Activity是否被重建,重建,就可去除之前保存的数据并恢复,onRestoreInstanceState的调用时机在onStart之后。

 

恢复和保存View层次结构,系统的工作流程(委托思想——上层委托下层、父容器委托子元素去处理一件事情):

1. Activity被意外终止时,Activity会调用onSaveInstanceState去保存数据

2. Activity委托Window去保存数据

3. Window委托它上面的顶层容器去保存数据。(顶层容器是一个ViewGroup,一般来说它很可能是DecorView

4. 顶层容器再去一一通知它的子元素来保存数据

以上为保存,恢复类似。

 关于ViewGroupDecorView,可参考:http://www.cnblogs.com/l2rf/p/6099170.html

 

情况2

资源内存不足导致低优先级的Activity被杀死。(存储和恢复过程同情况1

优先级从高到低:

1. 前台Activity——正在和用户交互的Activity,优先级最高

2. 可见但非前台Activity——比如Activity中弹出了一个对话框,导致Activity可见但是位于后台无法和用户直接交互。

3. 后台Activity——已经被停止的Activity,比如执行了onStop,优先级最低。

 

如果一个进程没有四大组件在执行,那么这个进程将很快被杀死。所以对于后台工作,应放在Service中从而保证有一定的优先级。

 

系统配置发生改变后,不想重新创建Activity:给Activity指定configChanges属性。如不想让Activity在屏幕旋转的时候重新创建,可以在AndroidManifest.xml文件中该Activity<activity>标签中添加:android:configChanges=”orientation”。

具体的configChanges的项目和含义可自行查找,此处不一一列举了。

0 0
原创粉丝点击