Activity的启动模式与吸附值详解
2016-03-13 08:40
267 查看
Activity的启动模式包含四中:standard、singleTop、singleTask、singleInstance四中启动模式,可在清单文件中做如下配置:
讲启动模式之前,不得不先讲一下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
<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
相关文章推荐
- .NET中的async和await关键字使用及Task异步调用实例
- 配置Grunt的Task时通配符支持和动态生成文件名问题
- c#异步task示例分享(异步操作)
- 使用os包和flag包实现读取main命令入参
- LTS 轻量级分布式任务调度框架(Light Task Scheduler)用户文档.md
- Activity的LaunchMode
- 深入讲解Android中Activity launchMode
- Android 复习_Task 与 Back Stack
- Android下Affinities和Task
- Linux进程状态解析之R、S、D、T、Z
- Android使用Home键后应用程序重启的问题
- android的task与activity关系
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- 理解android中Activity和Task的关系
- java实现定时任务的三种方式
- 安卓四大组件 之 Activity 之 任务栈和回收栈(Tasks and Back Stack)
- android launchmode
- 关于Activity和task的设计思路与方法
- Task Scheduler 使用