Activity的生命周期分析

来源:互联网 发布:网络健康度检测插件 编辑:程序博客网 时间:2024/05/21 11:18

Activity的生命周期有两种,一种是正常情况下的生命周期,另外一种则是异常情况下的生命周期;

第一:正常情况下的生命周期:

onStart和onStop是从Activity是否可见的情况下描述,onResume和onPause是从Activitu是否位于前台角度描述,


第二:异常情况下的生命周期

1:资源相关的系统配置发生改变导致Activity被杀死重建

如果Activity不做特殊处理时候,系统配置发生改变,Activity就会销毁并重建(比如横竖屏切换),当生命周期异常终止时候系统会默认调用onSaveInstanceState(Bunde )来保存信息(通过Bundle来传递信息),onSaveInstanceState是在OnStop执行之前,与onPause执行没有一定关系,有可能在其之前执行,也有可能在其之后执行。当然onSaveInstanceState只在系统异常情况下才会被调用,其他情况不会调用该该方法。如果想要判断生命周期是否被销毁或者想要获取生命周期被销毁前保存的信息,可以通过onCreate和onRestoreInstanceState来进行处理。onRestoreInstanceState和onCreate的区别是onRestoreInstaceState一旦被调用,Bundle saveInstanceState一定是有值的,onCreate启动时候Bundle saveInstanceState是null,所以需要判断。官方推荐第一种方式来恢复数据。注意onRestoreInstanceState是在onStart之后被调用。另外,系统会默认保存当前Activity的视图结构,在重启时候恢复数据,比如文本框用户输入的数据。。。具体恢复数据需要查看view的源代码

2:资源内存不足导致低优先级的Activity销毁

这种情况的数据存储和恢复和上述方法一样,Activity优先级分为三个:前台Activity,可见但非前台Activity,后台Activity。前台Activity表示正在和用户进行交互的Activity,优先级最高。后台Activity表示已经被暂停的Activity,优先级最低,比如执行了onStop的Activity,可见非前台Activity表示如被Dialog遮盖的Activit,可以看见,但是不能获取焦点。当系统内存不足的 时候,系统就会按照上述优先级杀死Activity,如果一个进程没有四大组件,那么这个进程很快就会被杀死。


其实我们可以预先对Activity进行处理,当如上述第一种Activity异常发生时候 ,生命周期不会被销毁重建。这需要我们添加改动Activity的configChanges属性,比如不想屏幕在旋转时候,生命周期发生改变,可以给其添加上orientation值,configChanges属性有非常多的值,详细自己查询

原创粉丝点击