1、android中通过任务队列来管理activity

采用栈的结构就是后进先出

手机里面如果启动多个应用就会启动多个任务栈来管理对应的activity。

主要解决下面的问题:对应的四种启动模式:

1、界面1去启动界面2,在界面2中再去启动界面1,是新创建一个界面1的实例,还是使用后来栈中的已经存在的实例,这就和界面1的设置的模式有很大的关系。

标准的模式:每次去调用都会产生一个新的实例,比如当前activity,你在当前的activity中点击按钮再创建当前的activity,在任务栈就会存在当前的activity的两个实例对象。

2、栈顶复用模式:如果已经有一个实例位于acitivity的顶部时候,就不会产生新的实例对象。如果不位于顶部,就会产生一个新的实例对象,举个例子:如果现在栈内的情况是abcd,其中a位于栈顶,这个时候如果d的模式是顶部模式,这个时候如果再启动d,不会在创建新的d的实例对象,栈内的情况还是abcd,如果d的模式设置成第一种标准的模式,那么栈的情况就是abcdd

3 sigleTask对象模式:如果创建一个d activity,此时任务队列中的情况是adbc,此时因为栈中存在了d对象,这个时候不会创建d对象的实例对象,因为d设置了sigleTask属性,此时会将bc从栈中移除出去,导致所有的在d上面的acitivity都会被移除出去,栈中最后只有ad。

4 上面所述的三种模式的activity对象都属于同一个task栈中,最后这种模式有点特殊。我们来举一个例子

界面a去启动界面b,其中界面a在任务s1队列中,界面b设置成singleInstance模式,这个时候会启动一个新的任务队列s2,在s2中放置b的实例对象,在b界面中启动界面c,整个时候不会创建一个新的任务栈,会把c放到队列s1中,s1对应的情况是ac,s2对应的情况是b。启动的顺利是a启动b,b中去启动c

这个时候如果点击返回按键,因为c现在处在可视界面,首先销毁的是s1的队列,先销毁c,在销毁a,s1队列销毁完成成在销毁s2队列在销毁b,而不是先销毁c,在销毁b,在销毁c。

最新文章

  1. python3循环语句while
  2. div自定义下拉框
  3. web开发前端学习
  4. C# 参数化SQL语句中的like和in
  5. iframe与frameset(转载)
  6. linux服务之crond
  7. codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
  8. Delphi7使用ADO直接连接Excel读取数据
  9. 数据挖掘-关联规则分析[ZZ]
  10. Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析
  11. 『电脑技巧』破解Win7/Win8登录密码
  12. 总结showModalDialog在开发中的一些问题
  13. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】
  14. Chapter 5 Blood Type——8
  15. oracle针对某列让特定信息排序[decode]
  16. VS重新生成项目失败,但是不报错
  17. 关于echarts堆叠图标问题 ,某条数数不需要堆叠的处理
  18. Python 基础 函数
  19. jQuery的end()方法使用详解
  20. 搭建简单FTP

热门文章

  1. [Objective-C] 006_Protocol(协议)
  2. 【Java8新特性】关于并行流与串行流,你必须掌握这些!!
  3. axios发送post form请求
  4. vue 使用 elementUI 和 antd 的细微差别
  5. css背景图定位和浮动
  6. 结合 AOP 轻松处理事件发布处理日志
  7. Java实现 LeetCode 836 矩形重叠(暴力)
  8. (Java实现) 蓝桥杯 国赛 重复模式
  9. Java实现 LeetCode 239 滑动窗口最大值
  10. java实现最大公约数