Activity生命周期和启动模式

来源:互联网 发布:域名备案掉了怎么办 编辑:程序博客网 时间:2024/06/06 04:52

1.生命周期

http://blog.csdn.net/lxj1137800599/article/details/50353728
这篇文章已经介绍了生命周期,概括下来就是下面这幅图
这里写图片描述

2.启动模式

(1)standard:标准模式。每次激活Activity时,都创建Activity实例,并放入任务栈,不管这个实例是否存在
(2)singleTop:栈顶复用模式。如果就是该Activity,则不需要创建,直接调用onNewIntent方法,其余情况都要创建Activity实例
(3)singleTask:栈内复用模式(单实例模式)。如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,调用onNewIntent,并把该Activity以上的Activity实例都pop
(4)singleInstance:单实例模式。加强版singleTask。A启动的时候会创建新的任务栈,后续A的启动只会复用

3.Activity的Flags

(1)FLAG_ACTIVITY_NEW_TASK = singleTask
(2)FLAG_ACTIVITY_SINGLE_TOP = singleTop
(3)FLAG_ACTIVITY_CLEAR_TOP:启动时,同一任务栈位于它上面的Activity都会出栈

4.IntentFilter匹配规则

只有action、data、category三方都匹配,Intent才算是匹配成功,进而才能打开相应的Activity。一个Activity若声明了多个Intent Filter,只需要匹配任意一个即可启动该组件。
(1)action的匹配规则
一个Intent Filter中可声明多个action,Intent中的action与其中的任一个action在字符串形式上完全相同(注意,区分大小写),action方面就匹配成功。可通过setAction方法为Intent设置action,也可在构造Intent时传入action。需要注意的是,隐式Intent必须指定action。
(2)category的匹配规则
与action和data不同,Intent中的category必须都在Intent Filter中出现才算匹配成功。Intent可以不指定category,若Intent中未指定category,系统会自动为它带上“android.intent.category.DEFAULT”。所以,想要接收Implicitly Intent的Activity都必须在manifest文件中的Intent Filter声明中带上“android.intent.category.DEFAULT”。我们可以通过addCategory方法为Intent添加category。
(3)data的匹配规则
data可进一步分为uri(由scheme、host、port、path | pathPattern | pathPrefix这4部分组成)和mimetype。Intent的uri可通过setData方法设置,mimetype可通过setType方法设置。隐式Intent也必须指定data。同action类似,只要Intent的data只要与Intent Filter中的任一个data声明完全相同,data方面就匹配成功。

0 0
原创粉丝点击