首页 > 代码库 > 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

      相当于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方法,不可分别指定,因为两方法将会互相覆盖。  

 

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