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

 

posted @ 2017-09-23 15:59  鹏达君  阅读(150)  评论(0编辑  收藏  举报