activity的生命周期和启动模式
Posted 鹏达君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了activity的生命周期和启动模式相关的知识,希望对你有一定的参考价值。
1.常见生命周期说明
2.两个常见问题
问题一答案:本质上就是onstart和onstop方法是是否可见进行调用,而onresume和onpause是看是否为前台互动而调用。
问题二答案:先执行a的onpause然后到b的oncreate,onstart,onresume再到b的onstop。启动一个活动可以简单理解为启动activity的请求会由Instrumentation来处理,然后它通过Binder想AMS发送请求,AMS内部维护着一个ActivityStack并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。
3.异常情况下的生命周期分析
1)资源相关的系统配置发生改变导致Activity被杀死并重新创建
2)资源内存不足导致优先级的Activity被杀死
Activity按照优先级从高到低进行分,如下:
总结:
1)当activity在异常状态下被杀死的时候,其会自动调用onSaveInstanceState()用于保存数据,并把这些数据放在Bundle中,然后再次启动该活动的时候,该Bundle会发送到onCreate()和onRestoreInstanceState()中,所以我们可以在这两个方法中进行判断其是否在异常状态下被杀死,从而取出数据,两个方法都可以取出数据,但是有一点的不同,就是onRestoreInstanceState()方法一旦被调用,其Bundle一定会有值,但是onCreate()不一样,官方推荐,是使用前者进行恢复数据。
注意:会调用onSavaInstanceState方法的情况:
1、当用户按下HOME键时2、长按HOME键,选择运行其他的程序时。3、按下电源按键(关闭屏幕显示)时。4、从activity A中启动一个新的activity时。5、屏幕方向切换时
代码实例:
2)
4.如何让配置改变的情况下不重新创建activity
核心:在activity配置中加上configchanges这个属性,其中值可以多个,只需要每个值之间加上“|”符号即可。
实例:
属性值列表:
注意:
1)我们最常用到的是
2)行环境无关
5.Activity的Flags
1)Activity的标记位很多,这边我们只学习常用的。
2)常用标记位:
3)注意:有些标记位是系统内部使用的,我们不要手动的去设置这些标记位。
6.IntentFileter的匹配规则
6.1准则:
1)一个activity可以有多个IntentfFilter
2)每个IntentFilter可以有多个action,catagory,data
3)当一个activity中由多个action,catagory,data时,只需要你这个intent所设置的action,catagory,data
能够和这个activity都对的上就好,也就是说这个intent中设置的这些属性必定是一个activity的子集。
4)每一个需要隐式intent开启的活动,其category必定要设置好一个值为DEFAULT,否则无法开启
5)data是由mimetype和URL组成的,mimetype指媒体类型,当一个activity中,即设置了mimetype和url,那么其
要用以下方法:
不能先调用setData再调用setType,或者相反,因为其方法会覆盖,导致data不完整。
6)URL剖析
7)如何判断是否有匹配的activity
以上是关于activity的生命周期和启动模式的主要内容,如果未能解决你的问题,请参考以下文章