Android启动模式以及IntentFilter匹配规则

少年乘勇气,百战过乌孙。这篇文章主要讲述Android启动模式以及IntentFilter匹配规则相关的知识,希望能为你提供帮助。
一、android的LaunchMode
共有四种启动模式
1、standard 
标准启动模式,Activity的默认启动模式。Activity的每次启动都创建新的示例
2、singleTop
栈顶复用模式,当启动的Activity处于栈顶时,不再创建新的活动实例。将回调onNewIntent方法。
3、singleTask
栈内复用模式,当启动的Activity在一个栈中存在实例,不再创建新的实例,弹出在其之上的所有实例将其置于栈顶。同样会回调onNewIntent方法。
4、singleInstance
单实例模式,指定该模式的Activity的实例只能单独位于一个任务栈中。
启动模式可通过两种方式指定,一是Activity的LaunchMode属性,二是调用Intent的addFlags方法为其指定Flag。常用的有:
1、FLAG_ACTIVITY_NEW_TASK
【Android启动模式以及IntentFilter匹配规则】相当于singleTask模式
2、FLAG_ACTIVITY_SINGLE_TOP
即singleTop模式
3、FLAG_ACTIVITY_CLEAR_TOP
处于该Activity之上的实例均出栈,即便是standard模式,也会在出栈后重新创建实例。
4、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
排除在Activity历史列表外,即无法通过back返回。
常配套使用的其他属性
1、TaskAffinity 
为Activty指定启动的栈,一般和singleTask或allowTaskReparenting结合使用
2、allowTaskReparenting
主要作用是activity的迁移,即从一个task迁移到另一个task,这个迁移跟activity的taskAffinity有关,必须是从一个跟该activity  taskAffinity不同的task中迁移到跟它taskAffinity相同的task中.

异常情况下Activity的启动(如屏幕旋转等)
此时Activity会销毁重建(onDestory--> onCreate),调用onSaveInstanceState保存数据,onRestoreInstanceState恢复数据。
可指定configChanges属性来使Activity不重建
常用的值有:
1、locale 一般为切换系统语言
2、orientation 屏幕需旋转(API> 13时,需再指定screenSize)
3、keyboardHidden 键盘可访问性发生改变。
二、IntentFilter的匹配规则
共有三种子属性——action、category、data,只有三者同时匹配时,对应的Activity才会启动。
具体匹配规则:action要求指定并且指定的action必须存在。
category可不指定,Intent会默认添加category(android.intent.category.DEFAULT),所以需隐性调用的Activity必须添加默认的category。
data由mimType(资源类型)和URI组成
URI: scheme://hast:port/path | pathprefix/pathPattern
URI默认值为content或file,Intent指定时调用setDataAndType方法,不可分别指定,因为两方法将会互相覆盖。
 

    推荐阅读