Android singleTask和 taskAffinity
来源:互联网 发布:好的比价软件 编辑:程序博客网 时间:2024/05/18 01:22
在Android中Activity有四种启动模式,1.standard; 2. singleTop; 3:singleTask; 4.singleInstance。这四种启动模式可以AndroidManifest中的activity标签中声明,例如launchMode =“singleTask”,其中默认是standard。
其中前面两种比较好理解,就不具体说了,但后面两种就相对不好理解了,因为牵涉到一个task的概念。
按Android官网文档的定义:task是一组activity的集合,它用来执行某一项特定的任务的。这看起来不是那么好理解,为什么不直接用application来表示呢?
诚然,一般情况下一个task中的activity都是一个application中的。但Android系统并不把activity局限在一个application中,你的应用可以启动另一个application中的activity,比如你可以调用系统的相机应用来拍照,将相机的activity置于启动它的task中,让用户觉得相机就是你应用的一部分,从而提高用户体验。从task的角度上来说,尽管这两个activity来自于两个不同的application,但是,确实存在于同一个task。
task在Android是用栈这种数据结构来描述的,每一个task都有自己的一个栈,存放着这个task下所有的activity.
与task有关的另一个概念是taskAffinity,这个表示acitivity更倾向于存在于哪一个task,<application> 和<activity> 标签下都有这个属性。<activity> 默认继承自<application>标签中的taskAffinity,而<application>默认是应用程序的包名。
假设有两个应用 APP1, APP2. APP1下有两个Activity A1 和B1; APP2下有两个Activity A2 和B2,
假设B1的启动模式为singleTask,那么B1只能存在于一个task中。如果是A2启动B1,那么B1应该存在于Task2中还是Task1中呢? 答案是Task1。 因为A1和B1默认是相同的taskAffinity,都是继承APP1下<application>标签中的taskAffinity。而A2的taskAffinity默认是继承的APP2下的taskAffinity。所以A2和B1不会存在于一个task中。这时,系统会检查是否已经存在B1实例,如果已经存在,直接将B1 任务栈上方的activity销毁弹出,并resume B1。如果不存在,创建一个task,并将B1 push进去。
假设B1的启动模式为singleInstance,那么不论是哪个activity启动它,它都会存在于单独的一个task中。这时,系统会检查是否已经存在B1实例,如果已经存在,直接启动并resume B1。如果不存在,创建一个task,并将B1 push进去。而且这个task将不会有其他的activity存在。
- Android singleTask和 taskAffinity
- 对SingleTask和TaskAffinity的理解
- 对SingleTask和TaskAffinity的理解
- 对SingleTask和TaskAffinity的理解
- Android关于Task的一些实践之SingleTask, SingleInstance和TaskAffinity
- Android之用SingleTask和TaskAffinity解决手机截取的项目启动页面问题
- Intent.FLAG_ACTIVITY_NEW_TASK和android:taskAffinity
- 【Android】关于FLAG_ACTIVITY_NEW_TASK 和 taskAffinity
- Android——你所忽略的launchMode之singleTask与taskAffinity
- singleTask 与 taskAffinity 缠绵的那些事
- activity的singletask模式以及taskaffinity属性
- Activity launchMode之singleTask与taskAffinity扫盲
- android:taskAffinity
- Android-taskAffinity
- android的taskAffinity和allowTaskReparenting的用途
- Android的LaunchMode,Intent flags和taskAffinity
- android singleTask
- android singleTask
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- JSON之Jackson(一)
- Android:使用Handler在线程之间通信
- Eclipse中与Ctr+Z 相反的快捷键是?
- asp.net网站的初探
- Android singleTask和 taskAffinity
- Android 用MediaCodec实现视频硬解码
- 找出重复元素并计算次数
- 安装Ubuntu虚拟机详解
- 数据范围
- 面向对象编程
- 数据库文件配置和数据库连接池的使用
- linux下安装redis
- 利用viewPager 制作滑动页面 源码