首页 > 程序开发 > 移动开发 > 其他 >

Activity的launchMode和taskAffinity介绍

2017-03-11

Activity的launchMode和taskAffinity介绍,我们都知道Android对Activity是通过分组来管理的,也就是说,每一个Activity都会存在于某一个分组,即Task内系统在启动Activity的时候。

我们都知道Android对Activity是通过分组来管理的,也就是说,每一个Activity都会存在于某一个分组,即Task内系统在启动Activity的时候,需要根据Activity的相关配置参数来决定将Activity置放于哪个Task中(CreateNew or Chose An Existing One)

本文只是做一些重点总结,详细的可阅读SDK文档

Launch Mode:

Activity有一个launchMode属性用以配置其启动类型,主要包含如下四个类型

"standard" (默认)

在默认情况下,调用者只要申请创建Activity,它就会被创建并放置到调用者的Task顶端,多次申请,会被多次创建

"singleTop"

这个指的是,在调用者所属Task如果未包含Activity对应的实例,则会

新创建一个实例并放置到Task顶端,如果在这个Task内已经包含有这个

Activity的实例,则仅将其移动到Task顶端而非创建

"singleTask"

Activity只会属于一个Task,而且在这个Task内只会包含一个这个Activity的实例

"singleInstance"

Activity只属于一个Task,不同于singleTask的是,这个Task只包含有Activity实例这个唯一成员

既然Activity是一个独立的个体,它必须要归属于某一个Task,那系统在初始化Activity的时候,必须要确认每个Activity是属于哪个Task的,这就需要在Activity中定义一个属性来表明Activity所属的Task,这个属性就是TaskAffnity.

TaskAffnity:

TaskAffnity用来描述Activity的所属Task,对于同一个App内的Activity来说,如果没设置的话,其默认值就是App的package name,也就是说,在默认情况下,所有Activity是属于同一个Task的,当然我们也可以手动为Activity自定义TaskAffnity:

android:name=".demo.DemoActivity"

android:label="@string/app_name"

android:taskAffinity="com.test.harish"/>

singleInstance没什么好说的,系统会为其建立一个单独的Task,所以对它来说TaskAffnity无所谓了

至于standard和singleTop,由于其所属Task是由其调用者来决定的,所以在一般情况下,TaskAffnity对这两种类型是不起作用的,不过有一种特殊情况,就是调用者的类型是singleInstance时,这就导致调用者所属的Task不允许添加Activity,在这时候,系统没招了,只能通过其TaskAffnity新建或者找到已有的Task,然后将Activity添加到其中

singleTask就是比较正常的操作了,当启动Activity的类型是singleTask时,系统会通过TaskAffnity新建或者找到已有的Task,接着判断Task中是否存在该Activity实例,如果存在,调用OnNewIntent传入数据,反之则新建.

相关文章
最新文章
热点推荐