Android Activity task 相关属性
- taskAffinity
- launchMode
- allowTaskReparenting
- clearTaskOnLaunch
- alwaysRetainTaskState
- finishOnTaskLaunch
Manifest.xml 中并没有 task 对应的元素或属性,因此这些属性都在 <activity> 元素下。有些属性是针对整个 task 的,只有在根 Activity 下才会生效。
Launch Modes
Launch Mode 决定了 Activity 在 task 中的行为与组织方式。有两种方式可以一定义 Activity 的 Launch Mode,一种是通过 Intent Flags,另一种是在 Manifest.xml 中 <activity> 标签下定义 launchMode 属性,launchMode 属性的值包括 standard,singleTop,singleTask,singleInstance 四种。(如果两种方式都有声明,则 Intent 中的 flag 值会覆盖 Manifest 中的 launchMode 属性。)
注意:Intent Flag 值与 launchMode 并不一一对应。因此某些行为只能通过其中一种方式实现
以下主要讲 launchMode 属性。 standard 是默认的启动方式,允许多个 Activity 实例存在,singleTop 要求栈顶只存在一个 Activity 实例,类似于在 Intent 中添加 FLAG_ACTIVITY_SINGLE_TOP 标记。
如:栈中有 A,B,C,D,在 D 中再启动 D ,默认情况下会变为 A,B,C,D,D,而加上此标记后仍为 A,B,C,D ,而 D 的
onNewIntent()方法会被回调到。
当 Activity 的启动方式为 singleTask 或 singleInstance 时,该 Activity 在系统中只会有一个实例。即系统在启动 Activity 时,如果当前某个 task 中存在 Activity 实例,则直接将该 task 推至前台。区别在于,singleInstance 要求其任务栈中只能有这一个 Activity,通过此 Activity 启动的 Activity 会被放至另外的 task 中,而singelTask 则无此要求。 如果 task 被推至前台时,singleTask 的 Activity 的顶层还有其它 Activity,则顶层的 Activity 会被全部清除掉。因此使用 singleTask 启动模式类似于 Intent 中添加 FLAG_ACTIVITY_NEW_TASK 与 FLAG_ACTIVITY_CLEAR_TOP 标记。(仍有轻微区别:使用 singleTask launchMode 时,Activity 不会重新创建,只会调用 onNewIntent()方法;而使用 intent flag 时,Activity 被重新创建)
如果 lauch mode 为 singleTask 的 Activity 不是根 Activity,则按返回键时,会一直返回到该 task 的根 Activity,再返回到之前启动它的 Activity。如下图所示:

Task Affinity
taskAffinity 属性,可理解为 Activity 所从属的 task。默认情况下,同一个应用程序下的 Activity 都从属于一个 task,但是可以对该属性进行修改使之依附不同 task。 该属性常用在两个地方:
- 当启动 Activity 的 Intent 包含 FLAG_ACTIVITY_NEW_TASK 标记时。如果系统中已经存在一个 task 与要启动的 Activity 有相同的 taskAffinity ,该 Activity 被压入该 task 中,否则启动一个新的 task。
- 当 Activity 的
allowTaskReparenting属性值为true时。通过程序 X 的 Activity A 启动程序 Y 的 Activity B,默认情况下 B 会被放入 A 所在的 task 中,再启动 Y 程序时 B 所在的 task 不变。如果 B 的allowTaskReparenting值为true,则当启动 Y 程序时 B 会被转压入到 Y 程序的 task 中。
清除任务栈
用户通过按 Home 键则最近程序列表离开当前应用程序,超过一定时间后(比如30分钟),系统会将 task 中的 Activity 清除掉,只保留根 Activity。因为用户长时间离开程序,可能想放弃或已经遗忘之前操作,重新打开程序时期待看到程序首页。 我们可以更改 Activity 的一些属性来改变这种行为。
- alwaysRetainTaskState:始终保持所有 Activity,不清除。
- clearTaskOnLaunch:始终清除非根 Activity,即使只离开很短时间。
- finishOnTaskLaunch:与 clearTaskOnLaunch 类似,但是只针对单个 Activity 而不是整个 task。(通过最近程序列表打开时不会清除)
原文地址:http://multi-thread.com/?p=74
参考:
Android Activity task 相关属性的更多相关文章
- Android总结篇系列:Activity Intent Flags及Task相关属性
同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...
- 【转】Android总结篇系列:Activity Intent Flags及Task相关属性
[转]Android总结篇系列:Activity Intent Flags及Task相关属性 同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http:// ...
- Activity Intent Flags及Task相关属性
转自http://www.cnblogs.com/lwbqqyumidi/p/3775479.html 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式 ...
- 查看activity task相关信息
可以使用命令 adb shell dumpsys activity 查看的结果如下 ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents ...
- 基础总结篇之三:Activity的task相关
http://blog.csdn.net/liuhe688/article/details/6761337 古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示 ...
- Activity的task相关 详解
task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity:默认情况下,一个Activity启动另一个Activity时,两 ...
- AndroidManifest.xml中<activity></activity>相关属性说明
虽说,从事android开发有一定时间了,对于Activity大家也都不陌生,但是具体的对于Activity中相关属性的含义有必要做一个系统的总结: intent-filteraction: 来指定响 ...
- android的task任务栈
转自http://blog.csdn.net/liuhe688/article/details/6761337 古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀 ...
- 详解Android Activity启动模式
相关的基本概念: 1.任务栈(Task) 若干个Activity的集合的栈表示一个Task. 栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...
随机推荐
- 【webGl】threejs实现一个简单的动画-弹跳的小球
在这里,我们将动态画面简称为动画(animation).正如动画片的原理一样,动画的本质是利用了人眼的视觉暂留特性,快速地变换画面,从而产生物体在运动的假象.而对于Three.js程序而言,动画的实现 ...
- item2快捷键
整理使用 iTerm 2 过程中得常用快捷键,Mac 原来自带的终端工具 Terminal 不好用是出了名的,虽然最近几个版本苹果稍微做了些优化,功能上,可用性方面增强不少,无奈有个更好用的 Iter ...
- css初始化代码
最近老有新项目开发,一直在找存留的CSS初始化代码,索性放到这里备份下, @charset "utf-8"; /* -------------------------------- ...
- 377. Combination Sum IV
问题 Given an integer array with all positive numbers and no duplicates, find the number of possible c ...
- UTF-8编码规则(转)
from:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html UTF-8是Unicode的一种实现方式,也就是它的字节 ...
- php 封装 知识点
类由众多对象抽象出来的对象由类实例化出来的 成员变量成员方法成员属性 访问修饰符public 公有的protected 受保护的private 私有的 构造函数1.写法特殊2.执行时间特殊 面向对象的 ...
- 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】
之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...
- 【Java EE 学习 54】【OA项目第一天】【SSH事务管理不能回滚问题解决】【struts2流程回顾】
一.SSH整合之后事务问题和总结 1.引入问题:DAO层测试 假设将User对象设置为懒加载模式,在dao层使用load方法. 注意,注释不要放开. 使用如下的代码块进行测试: 会报错:no sess ...
- Ueditor之前后端源码的学习和简单的研究
这是我的项目目录 这里写图片描述 1.从访问路径http://localhost:8081/Test/_examples/simpleDemo.html,我们主要是要看看,富文本框被加载出来之前,会调 ...
- Intel.parallel.studio.xe.2015.Update.2.ISO-TBE 下载
磁力链下载点我 还有linux版本 Intel.parallel.studio.xe.2015.Update.1.LINUX.ISO-TBE 收集自网络,要跨请跨原作者,谢谢.