Task和backStack(本篇章核心)

对Task和backStack的认识过程

1.由demo测试得到的关系图:

1.一个task中可以有多个app的Activity,

由于一个app可以对应一个或多个process,

2.所以一个task也可以对应多个process。

2.由adb shell dumpsys activity测试得到的关系图:

1.Android将所有的task维护在Main stack中,

2.每个task由TaskId唯一标识,在Hist中包含了处于同一个task内的Activity,

3.不同的process(拥有不同的PID)中,可以包含同一个app的不同Activity,

4.一个package标识一个Application。

3.通过学习源码得到的关系图:

1.在ActivityManagerService中,由一个ActivityStack对象维护回退栈,而具体到ActivityStack中,由mHistory来维护回退栈(是一个ArrayList,而非Stack)。

2.每个Task即为一个TaskRecord对象,

3.TaskRecord没有为每个Task维护一个自己的stack或list,

4.mHistory中,不是直接管理Activity,而是维护ActivityRecord对象,

5.ActivityRecord对象通过TaskRecord与自己所属的Task关联起来,

6.ActivityRecord对象通过Activity info对象与对应的Activity关联起来,

7.分析ActivityStack中的moveTaskToFrontLocked()等对Task进行操作的代码,得到,同一个task的ActivityRecord在mHistory中是放在一起的(按照先入先出的顺序),当一个task被调到前台时,这个mHistory中,属于同一个task(taskId一致)的ActivityRecord被一起移到mHistory的顶端(在这个ArrayList中,以最后一个元素所在的位置为top,top=size()-1);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏芋道源码1024

【死磕Java并发】—– J.U.C之并发工具类:Semaphore

2045
来自专栏Jed的技术阶梯

Java设计模式之适配器模式

今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是220V,...

812
来自专栏androidBlog

建造者模式(Builder)及其应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

831
来自专栏醒者呆

促和谐好干部——适配器模式

我们的笔记本电脑的充电线上通常都会有一个大砖块似得东西,这个东西是用来将家用额定电压220V转换成笔记本适用的电压,它叫做变压器,也叫做适配器。 今天要研究的是...

3575
来自专栏腾讯Bugly的专栏

Android开发必备知识:为什么说Kotlin值得一试

1、Hello, Kotlin 1.1 Kotlin的身世 写了许久 Java,有没有发现其实你写了太多冗余的代码? 后来你体验了一下 Python,有没有觉得...

4199
来自专栏熊二哥

.NET工作准备--01前言

01应聘须知(已过时) -1.了解软件开发大环境。 -2.准备简历:不宜超过一页,永远准备中文,模板。 -3.渠道:3大网站,中华英才,前程无忧(51job最...

2028
来自专栏tkokof 的技术,小趣及杂念

移动开发之浅析cocos2d-x的中文支持问题

  题记:这阵子一直在学习cocos2d-x,其跨平台的特性确实让人舒爽,引擎的框架概念也很成熟,虽然相应的第三方工具略显单薄,但也无愧是一件移动开发的利器啊,...

812
来自专栏chenssy

【死磕Java并发】—–J.U.C之并发工具类:Semaphore

信号量Semaphore是一个控制访问多个共享资源的计数器,和CountDownLatch一样,其本质上是一个“共享锁”。

533
来自专栏JavaQ

高并发编程-Semaphore深入解析

Semaphore是J.U.C包下的许可控制类,维护了一个许可集,通常用于限制可以访问某些资源(物理或逻辑的)的线程数目,或对资源访问的许可控制。

921
来自专栏进击的程序猿

The Clean Architecture in PHP 读书笔记(二)

设计模式是对软件中通用问题的总结,有了设计模式,方便我们进行交流,譬如一说MVC,我们就知道是怎么回事了,不然我们必须巴拉巴拉一大堆话去描述,不易于传播、交流,...

694

扫码关注云+社区