singleTask TaskAffinity allowTaskReparenting
关于singleTask TaskAffinity allowTaskReparenting
一、Activity的LaunchMode
1.standard
2.singleTop:FLAG_ACTIVITY_SINGLE_TOP 栈顶复用模式,即如果栈顶有本activity实例,则无需新实例化activity。
3.singleTask:FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_CLEAR_TOP的效果
4.singleInstance:单独一个栈,且栈内复用,一旦新建后,只要不销毁,就不会再新建activity
二、Actvity的Flags
1.FLAG_ACTIVITY_NEW_TASK : 同singleTask
2.FLAG_ACTIVITY_SINGLE_TOP :同singleTop
3.FLAG_ACTIVITY_CLEAR_TOP 与FLAG_ACTIVITY_NEW_TASK配合使用,
4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS android:excludeFromRecents = "true" 不出现再历史Activity列表中
三、聚焦singleTask
standard singletop singleinstance都比较容易理解,就是这个singleTask比较难理解,这里我们对singleTask做下知识整理
singleTask:FLAG_ACTIVITY_NEW_TASK
功能1:栈内复用原则,已有实例情况下不新建,只调用onNewIntent
功能2:默认有clearTop的效果,将已实例化的activity上面的activity全部出栈。
1.我们首先要知道一个activity的参数,TaskAffinity
TaskAffinity:标识Activity所需要的任务栈的名字。默认情况下,Activity所需要的任务栈的名字为应用的包名。可以给每个Activity单独指定TaskAffinity的属性。
singleTask要和TaskAffinity配合使用
2.singleTask和TaskAffinity的三个配合原则
(1).当前任务栈S1的栈内情况为ABC,Activity D的TaskAffinity属性为任务栈S2,ActvityD以singleTask模式请求启动。
结果:系统先创建任务栈S2,新建D的实例入栈S2。最终S1的栈内情况为ABC,S2的栈内情况为D
(2).当前任务栈S1的栈内情况为ABC,Activity D的TaskAffinity属性为任务栈S1(即不特别指定,默认情况下),ActvityD以singleTask模式请求启动。
结果:系统直接创建D的实例入栈S1,最终S1的栈内情况为ABCD
(3).当前任务栈S1的栈内情况为ADBC,Activity D的TaskAffinity属性为任务栈S1(即不特别指定,默认情况下),ActvityD以singleTask模式请求启动。
结果:系统不创建D,切换D到栈顶并调用其onNewIntent方法,并将D上面的Activity全部出栈,最终S1的栈内情况为AD
3.TaskAffinity还有一个功能,就是和allowTaskReparenting结合:
allowTaskReparenting:官方定义是“Whether or not the activity can move from the task that started it to the task it has an affinity for when that task is next brought to the front — "true" if it can move, and "false" if it must remain with the task where it started.”简单翻译就是是否允许该Activity从启动他的任务(可以理解为activity栈)转移到与他有亲密关系(affinity)的任务中,当有亲密关系的任务再次启动时。
举例说明:
ActvityA是应用1的主Actvity,ActivityB和ActvityC属于应用2,B为主Activity。
操作路径:A启动C-->点击Home键盘到Launcher->点击launcher上的应用2
情况1.ActivityC的allowTaskReparenting属性为false,此时会进入ActvityB 典型案例:将文字文件等,分享到短信
原因:当前任务栈1为AC,此时启动应用2,会启动任务栈2,然后将主ActivityB放入任务栈2中
情况2:ActivityC的allowTaskReparenting属性为true,此时会进入ActvityC 典型案例:将文字文件等,分享到微信
原因:当前任务栈1为AC,此时启动应用2,会启动任务栈2,然后系统发现C的taskAffinity属性任务栈2已经创建,就把C从任务栈1转移过来,这就是allowTaskReparenting的功能。
四、调试时,我们可以使用adb shell dumpsys activity命令来查看当前系统的任务栈信息
参考资料:《Android开发艺术探索》
singleTask TaskAffinity allowTaskReparenting的更多相关文章
- 对SingleTask和TaskAffinity的理解(转至 http://www.2cto.com/kf/201311/254450.html)
最近研究微信调起自己客户端的事情,对于SingleTask和TaskAffinity的理解又多了一些理解. 以前对于Android的四种LaunchMode有一些了解,其中比较有意思的就是Sing ...
- 对SingleTask和TaskAffinity的理解
最近研究微信调起自己客户端的事情,对于SingleTask和TaskAffinity的理解又多了一些理解. 以前对于Android的四种LaunchMode有一些了解,其中比较有意思的就是Single ...
- Android -- taskAffinity
每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task.如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个属性就等于Ap ...
- taskAffinity属性
Activity的归属,也就是Activity应该在哪个Task中,Activity与Task的吸附关系.我们知道,一般情况下在同一个应用中,启动的Activity都在同一个Task中,它们在该Tas ...
- [转]Android的taskAffinity
Activity的归属,也就是Activity应该在哪个Task中,Activity与Task的吸附关系.我们知道,一般情况下在同一个应用中,启动的Activity都在同一个Task中,它们在该Tas ...
- Android堆栈分析
在开发中,与界面跳转联系比较紧密的概念是Task(任务)和Back Stack(回退栈).activity的启动模式会影响Task和Back Stack的状态, 进而影响用户体验.除了启动模式之外,I ...
- Activity的任务栈Task以及启动模式与Intent的Flag详解
什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...
- Android开发艺术2之Activity的启动模式
Activity是Android的四大组件之一,他的重要性毋庸置疑,对于这么重要的一个组件,我们首先要知道这些都是由系统进行管理和回调的,要理解Activity的启动模式,我们首先来了解一下Andro ...
- 喜闻乐见-Android LaunchMode
launchMode,通俗点说,就是定义了Activity应该如何被launch的.那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么 ...
随机推荐
- 剖析并利用Visual Studio Code在Mac上编译、调试c#程序【转】
0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...
- tail tailf 使用
tail -f tailf 用来查看日志的新增内容, tailf 能一直打印日志
- cf D Bear and Floodlight
题意:有n个灯,每个灯有一个照亮的角度,现在从点(l,0)走到点(r,0),问这个人若一直被灯照着能最多走多远? 思路:状压dp,然后通过向量旋转求出点(dp[i[,0)与灯的坐标(p[j].x,p[ ...
- H3C S5000和H3C S5500,俺来罗
S5开头,后面第二位数0-4搂二层交换机.5-9的为三层交换机. 小常识.
- json数值和结构
JSON 值可以是: l 数字(整数或浮点数) l 字符串(在双引号中) l 逻辑值(true 或 false) l 数组(在方括号中) l 对象(在花括号中) l null JSON建构 ...
- mysql 树形数据,层级数据Managing Hierarchical Data in MySQL
原文:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 引言 大多数用户都曾在数据库中处理过分层数据(hiera ...
- -_-#【CSS3】浏览器前缀
前缀 浏览器 -khtml Konqueror(非常老的 Safari) -moz Firefox -o Opera -ms Internet Explorer -webkit Safari.Chro ...
- Linux 多线程调试(内存占用、死循环、CPU占用率高……)
文章出处:http://www.cnblogs.com/cy568searchx/archive/2013/10/28/3391790.html 你的软件在某个时刻停止服务,CPU占用达到100%+, ...
- 图论(网络流):[SDOI2010] 星际竞速
Description 10 年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一. 赛车大赛的赛场由 N 颗行星和M ...
- 【最短路】Vijos P1022Victoria的舞会2
题目链接: https://vijos.org/p/1022 题目大意: 给一张N个点的有向图,求有几块强连通分量.(N<=200) 题目思路: [动态规划] n比较小,可以用floyd暴力把每 ...