一,任务

任务是由界面组件组成的一个栈,这些界面组件可以来自多个进程,多个应用,为共同完成一项任务而存在,比如写邮件时会用到邮件应用和联系人应用中的界面组件,这些界面组件在同一个任务中运行。

二,界面组件的运行模式

1,standard   标准模式,每次调用界面组件都会生成一个新的实例压入任务栈的栈顶。

2,singleTop ,对应 Activity_FLAG_ACTIVITY_SINGLE_TOP,如果当前界面组件在栈顶,则再次调用该界面组件时不会生成新的实例,而是直接使用栈顶的界面组件,通过 onNewIntent方法将 Intent对象传给界面组件。 但是如果界面组件不在栈顶,则会在栈顶生成新的实例。

3,singleTask 和 singleInstance,当调用这种运行模式的界面组件时,会启动一个新的任务(如果还没启动的话),将该界面组件放入栈底。如果再次调用该界面组件,则会将该界面组件上方清空,再次复用该界面组件。

singleInstance有一点不同,就是新任务中有且只有这一个界面组件,而singleTask则是在新任务中会有多个其它的界面组件。

使用singleTask还需注意:如果界面组件同时设置了任务粘度属性,android:taskAffinity属性,那么该界面组件就不一定必须是根组件了,如果指定的任务已经存在,它会直接跳到指定的任务中去。

三,任务粘度  android:taskAffinity 属性

表明这个界面组件想在哪个任务中运行,单独设置该属性没用,需要再设置下面的其中一项:

1,设置 android:allowTaskReparenting = "true"

2,通过设置Activity.FLAG_ACTIVITY_NEW_TASK标记。

四,实例:

1,安卓原生应用:浏览器应用

其界面组件 BrowserActivity 配置成了 singleTask ,同时设置了 android:alwaysRetainTaskState = "true",该设置表示总是维护任务状态。

2,联系人应用:

通过 android:taskAffinity 将联系人管理,来电管理相关的界面组件分别放在不同的任务中。

参考:

《android开发精要》 范怀宇 著

最新文章

  1. 163邮件出错:不允许使用邮箱名称。 服务器响应为: authentication is required,smtp7,C8CowEDpS0+Uke9VvSmXBg--.546S2 1441763733
  2. GitHub团队项目合作流程
  3. winform 获取当前程序运行根目录
  4. maven工程直接部署在tomcat上
  5. IOleItemContainer的接口定义
  6. 织梦DedeCMS删除所有栏目或文章后,新建ID不从1开始的解决方法
  7. 201. Segment Tree Build
  8. Delphi泛型评测(30篇)
  9. 小言HTTP Authentication
  10. 如何让 Git 忽略掉文件中的特定行内容?
  11. WPF获取窗口句柄的方法
  12. 阿里云ECS的CPU100%排查
  13. SQl语句中使用占位符的优点
  14. xpath路径定位
  15. 子元素z-index高于父元素兄弟元素z-index被遮挡问题
  16. git 的一般使用
  17. 【git】git pull
  18. linux常用命令总结->1
  19. C++中bool类型变量初值对程序的影响
  20. sofar:机器学习检测十题

热门文章

  1. Ibatis之RowHandler
  2. Spring Boot with JSP and Tiles3
  3. Spring中的Interceptor 拦截器 专题
  4. 倒计时的CountDownTimer
  5. WPF中Style文件的引用——使用xaml代码或者C#代码动态加载
  6. JS 密码弱中强显示
  7. SQL Server分页存储过程笔记
  8. x名称空间中的内容
  9. [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口
  10. xcode缓存清理