Activity启动模式
来源:互联网 发布:新红帆网络 编辑:程序博客网 时间:2024/06/07 03:27
据我们所知Activity有多种启动模式,各种启动模式启动所带来的行为是不同的,据官方文档所说,在manifest文件<activity>元素中可以设置如下几个属性:
taskAffinity
launchMode
而在Intent中,有如下几个FLAG是比较常用的:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
下面就来看一下这些属性和FLAG的设置会影响到Activity的什么行为
Activity的启动模式
有两种方法可以定义Activity启动模式,在manifest文件中定义和使用Intent的FLAG定义,这两种定义模式各有各的不同,但是在两者同时存在的时候以Intent中定义的启动模式为准。
在manifest文件中定义:
当在manifest文件中定义Activity的时候,可以通过设置<activity>标签下的launchMode属性来设置当前Activity的启动模式,有如下几个可选项
1.standard(标准模式):
standard模式是系统默认的启动模式。每次启动一个Activity都会创建出一个新的实例,在一个任务栈中可以有多个Activity的实例。以这种模式启动的Activity将会在启动它的Activity所在的任务栈中,不可以用ApplicationContext去启动standard模式的Activity,不然会出现异常,因为ApplicationContext没有自己的任务栈。
2.singleTop:
栈顶复用模式。如果启动的Activity在当前任务栈的栈顶,那么不会重新启动,只会调用Activity的onNewIntent方法,但是如果启动的Activity不在当前任务栈的栈顶,将会创建新的实例,所以说以这种模式启动的Activity也会在同一个任务栈中存在多个实例。
3.singleTask:
当一个Activity以这种模式启动时,系统会寻找这个Activity的相关任务栈,如果这个任务栈存在,就会检查任务栈中是否有这个Activity的实例,如果有,就不会创建Activity,如果没有则会创建出这个Activity并入栈。如果这个Activity的相关任务栈不存在,则会创建出一个任务栈,并且将Activity放到新的任务栈中。
上面提到的相关任务栈是什么呢?以下是官方文档的一些介绍:
如果在Intent中加入了一个FLAG_ACTIVITY_NEW_TASK flag或者在manifest文件中配置的启动模式是singleTask的话,系统将检查当前任务栈的affinity和该Activity设置的affinity是否相同,如果相同则会把它放到当前的任务栈中,如果不同将会创建一个新的任务栈,默认情况下Activity的affinity为当前应用的包名。
有一点需要注意,如果创建的这个Activity的相关任务栈存在,并且在任务栈中存在这个Activity的实例的话将会把这个任务栈放到栈顶,那么在这个Activity实例之上的Activity都将执行出栈操作。
4.singleInstance:
这种模式和singleTask很像,基本上由singleTask的所有特点。但是不同的是以这种模式创建的Activity只能自己单独的处于一个任务栈中。
使用Intent的FLAG设置
1.FLAG_ACTIVITY_NEW_TASK:
和singleTask模式类似,启动的Activity都会位于自己的任务栈中。以这种模式启动Activity经常用来列出很多可以启动的选项来进行启动。
2.FLAG_ACTIVITY_SINGLE_TOP:
和singleInstance模式基本相同。
3.FLAG_ACTIVITY_CLEAR_TOP:
设置了这个FLAG的Activity在启动的时候如果在当前任务栈中已经存在实例,会将存在的实例之上的所有Activity全部出栈。
- android Activity启动模式
- Android Activity启动模式
- activity启动模式详解
- Activity启动模式1
- activity的启动模式
- Activity有四种启动模式
- Activity启动模式
- activity启动模式分析
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式总结
- Activity的启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- [黑马IOS自学第二篇]C基础(常量,变量,标示符,变量作用域,scanf函数,运算符)
- hdu 验证角谷猜想 1279
- IOS http请求的get 和 post的请求的区别
- arm mini2440 基于v4l2 ffmpeg x264的视频远程监控
- UIDatePicker 日期滚轮)/时间选取器
- Activity启动模式
- 学习java手动编译
- iPhone SDK 包含哪些东西
- windows下mysql5.6.x的日志正确配置方法(my.ini)
- ARC下dealloc过程及.cxx_destruct的探究
- 让Category支持添加属性与成员变量
- .NET学习(一)VisualStudio连接MySQL数据库
- Core Data
- SoftReference 、WeakReference 总结