您的位置:首页 > 其它

Activity的启动模式与吸附值详解

2016-03-13 08:40 267 查看
Activity的启动模式包含四中:standard、singleTop、singleTask、singleInstance四中启动模式,可在清单文件中做如下配置:

<span style="font-size:18px;"><activity android:name="MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:taskAffinity="com.henry.it.test">
</activity></span>


讲启动模式之前,不得不先讲一下taskAffinity的知识,中文一般翻译为吸附值:
首先taskAffinity是决定Activity的task分配的唯一标准,也就是说,新启动的Activity是否在原任务栈中,由taskAffinity的值决定,其要点如下:

a)所有Act都有一个taskAffinity,如未明确指定,则默认该Act的吸附值与其所在application的吸附值相同

b)application一定有一个taskAffinity,如果为明确指定,则默认使用该程序的主包名作为吸附值

c)每个task一定有一个taskAffinity,该值取其Act栈的栈底Activity的吸附值

介绍完TaskAffinity的基本知识,再来讲四中启动模式特点:

1、standard:标准模式,也是默认模式

a)每次启动Act,都会创建该Act的新实例

b)每个新创建的Act实例默认都创建于启动它的Act所在的task

c)每个act可以同时存在多个实例,这些实例可以分布在同一个Task中,也可以分布在不同的Task中

2、singleTop

a)当具有singleTop属性的Act的实例不位于启动它的栈的栈顶时,其表现与standard模式相同

b)当具有singleTop属性的Act的实例位于启动它的栈的栈顶时,则不会创建该Act的新实例,而是调用栈顶Act的实例的onNewIntent()方法,将新intent传入该实例

3、singleTask

a)具有singleTask属性的Act局有全局唯一性,在整个Android系统内,该Act在同一时刻只能存在一个实例

b)当启动具有singleTask属性的Act时,如果该Act实例上不存在则直接创建新实例,否则,直接将已存在的该Act实例以上的实例全部销毁,以使得该Act的实例重新处于栈顶位置,并调用onNewintent()方法将新的intent传入该实例中

c)在创建具有singleTask属性的Act时,如果该Act的TaskAffinity值与当前task的affinity值相同,则直接在当前task中创建,否则在新的task中创建

4、singleInstance

a)具有singleInstance属性的Act局有全局唯一性,在整个Android系统内,该Act在同一时刻只能存在一个实例

b)当启动局有singleInstance属性的Act时,如果该Act实例上不存在则直接创建新实例,且总是在一个新的Task中创建(不考虑吸附值);如果该Act的实例已存在,则直接显示已存在的实例

c)该使用局有singleInstance属性的Act的实例启动其他Act的实例时,如果被创建的Act的吸附值与已存在的某个task的吸附值相同,则在该task中创建,否则,在新的task中创建实例。

5、Intent的Flag属性,旗标与启动模式

a) FLAG_ACTIVITY_BROUGHT_TO_FRONT 若栈中已有A B C D四个Act且B是用该旗标启动的,那么再次启动B将会使栈中的Act的顺序变为 A C D B;

b)FLAG_ACTIVITY_CLEAR_TOP 相当于启动模式中的singleTask

c)FLAG_ACTIVITY_NEW_TASK 默认旗标

d)FLAG_ACTIVITY_NO_ANIMATION 不使用过渡动画的旗标

e)FLAG_ACTIVITY_NO_HISTORY 该旗标控制被启动的Act不会保留在栈中,例如栈中已有A B两个Act,在B中以该Flag启动C,再在C中启动D,此时栈中只有A B D,没有C;

f) FLAG_ACTIVITY_RECORDER_TO_FRONT 若栈中已有A B C D四个Act,那么在D中以该Flag启动B将会使栈中的Act的顺序变为 A C D B,注意与FLAG_ACTIVITY_BROUGHT_TO_FRONT的区别;

g)FLAG_ACTIVITY_SINGLE_TOP 相当于启动模式中的singleTop
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息