activity配置属性:launchMode、taskAffinity
来源:互联网 发布:mac怎么打开ps文件夹 编辑:程序博客网 时间:2024/05/30 05:27
内容为参阅其他文章整理。
配置Activity的时,用到的两个属性:lanuchMode表示Activity的加载模式和taskAffinity表示该Activity所依附的Task的标识。
launchMode:
1、standard:默认的加载模式,表示加载一个新的Activity。如果Task的Activity的顺序是:A、B、C、D(四个的加载模式均为standard),现D启动C,则Activity的顺序是A、B、C、D、C;
2、singleTop:字面意思:只有处于栈顶时才保持single状态。当要加载的Activity配置为该模式时,当Task的Activity顺序是:A、B、C、D(其中C、D加载模式为singleTop),如果D启动D,则Activity的顺序仍是A、B、C、D,如果D启动C,则Activity的顺序是A、B、C、D、C,当Task中还没有要加载的Activity时,新建(实例化)该Activity,压入Task中;
3、singleTask:字面意思:在一个栈中保持single状态。当要加载的Activity配置为该模式时,当Task的Activity顺序是:A、B、C、D(其中B为singleTask),如果D启动B,则Activity的顺序是A、B,此时的C、D都已经被弹栈,当Task还没有要加载的Activity时,新建(实例化)该Activity,压入Task中;
4、singleInstance:字面意思:一直是single状态。当要加载的Activity配置为该模式时,新建(实例化)该Activity,会将打开的Activity压入一个新建的任务栈中。例如:Task栈1中结构为:A B C ,C通过Intent跳转到了D(D的模式为singleInstance),那么则会新建一个Task 栈2,栈1中结构依旧为A B C,栈2中结构为D,此时屏幕中显示D,之后D通过Intent跳转到D,栈2中不会压入新的D,所以2个栈中的情况没发生改变。如果D跳转到了C,那么就会根据C对应的launchMode的在栈1中进行对应的操作,C如果为standard,那么D跳转到C,栈1的结构为A B C C ,此时点击返回按钮,还是在C,栈1的结构变为A B C,而不会回到D。Activity配置为singleInstance时,会一直保持该Activity所在Task只有该Activity一个Activity存在,这个现象结合taskAffinity属性表现的更加明显。
关于singleInstance的一个结论:lanuchMode配置为singleInstance的Activity所在的Task只有该Activity一个Activity,不会有其他Activity。比如有三个Activity,他们的配置和启动关系如下:
Activity1------------------------------>Activity2---------------------->Activity3
singleInstance 默认 singleInstance
运行发现Activity所在的Task的ID为97,Activity2所在的Task的ID为98,Activity3所在的Task的ID为99(ID根据不同的运行,会出现不同的结果)。即三个Activity的Task是不同的,也就是说singleInstance的Activity启动默认的Activity,会新启动一个Task,singleInstance的Activity所在的Task只有该一个Activity,默认的Activity启动singleInstance的Activity也会启动一个新的Task。
taskAffinity:
表示该Activity所依附的Task的标识,即新建(实例化)的Activity要压入哪个栈中。
配置Activity时如果没有配置该属性,则默认为该Activity所在的application配置的该属性,如果application也没有配置该属性,则默认为应用的包名。
Task也存在该属性,即为根Activity的taskAffinity(第一个压入该栈的Activity)。
新建(实例化)一个Activity,该Activity会首先寻找是否有已经存在相同taskAffinity,如果存在,则在该Task中新建(实例化)该Activity,但是在singleInstance时例外,下面就结合launchMode和taskAffinity对每种情况做介绍:
application Activity taskAffinity
app1 Activity1 com.lyc.demo.test(和包名不同)
app1 MainActivity 不配置, 默认包名
app2 Activity2 com.lyc.demo.test
1、standard:如果已经存在相同taskAffinity的Task,则在该Task中新建(实例化)Activity,如果不存在,则新建一个栈,在该栈总实例化,例如:在上述前提下app1中MainActivity启动Activity1,会为Activity1新建一个栈(不同于MainActivity所在栈,可以通过getTaskId()方法取得加以区别),在该栈中实例化。
2、singleTop:如果已经存在,则看该栈中是否已经存在实例化的该Activity实例,如果存在,则看是否在栈顶,如果在栈顶,则栈内Activity顺序不变,如果不在栈顶,则在该栈中新建(实例化)该Activity,如果该栈中不存在实例化的该Activity实例,则在该栈中新建(实例化)该Activity。如果不存在相同taskAffinity的栈,则新建Task,再在该栈中新建(实例化)该Activity。
3、singleTask:如果已经存在,则看栈中是否已经存在实例化的该Activity实例,如果存在,那么销毁在该Activity以上的Activity并调用onNewIntent。如果没有实例化,那么该Activity实例化并入栈。如果不存在相同taskAffinity的栈,则新建Task,再在该栈中新建(实例化)该Activity。
4、singleInstance:如果存在,则看栈中是否已经存在该Activity实例,如果不存在该Activity实例,则为该Activity新建Task,并在新建的Task中新建(实例化)该Activity。如果存在的Task已经存在该Activity的实例,则调用该Activity的onNewIntent。如果不存在相同taskAffinity的栈,则新建Task,再在该栈中新建(实例化)该Activity。
-----------------------------------------------------------------------------------------
对于启动Activity通常使用Intent,Intent的属性flag可以设置控制启动Activity的方式。具体可以参见《疯狂Android讲义》相关章节。
- activity配置属性:launchMode、taskAffinity
- Activity LaunchMode & TaskAffinity
- Activity的LaunchMode与TaskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Activity launchMode,taskAffinity,Intent.Flag
- Activity的LaunchMode和taskAffinity
- Activity的LaunchMode和taskAffinity
- Android中Activity四种启动模式(LaunchMode)和taskAffinity属性
- Activity的taskAffinity属性
- Activity的taskAffinity属性
- ContentProvider 内容提供者 共享数据
- Eclipse程序员要掌握的常用快捷键
- android开发过程中 R文件消失 clean 和 build project都无效 已解决
- poj3254--Fields+状态压缩dp
- 打印正弦余弦曲线
- activity配置属性:launchMode、taskAffinity
- KMP
- qq登陆界面模拟
- Mac下安装终端工具,可使用终端下载软件
- 【零起步开发Cocos2dx-3.x-王牌飞行员(三)】素材文件的制作
- [dlang](一)利用dub搭建vibe.d,hibernated,mysql开发环境
- 执行力很重要
- 网络爬虫基本原理(一)
- poj 3468 A Simple Problem with Integers splay