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 条评论
登录 后参与评论

相关文章

来自专栏海天一树

小朋友学Java(4):构造函数

一、先看一下C++的构造函数 小朋友学C++(5):构造函数 二、新建Dog.java文件和DogTest.java文件 ? 三、将第一步中的C++代码稍微改动...

2586
来自专栏海天一树

小朋友学Java(7):继承

在学习Java的继承之前,可以先复习一下C++的继承: http://www.jianshu.com/p/bc9b7ddb141c 一、定义 继承就是子类(派生...

2505
来自专栏数据处理

scala类与伴生类、单例

833
来自专栏python3

python3--object类,继承与派生,super方法,钻石继承问题

{'kind': '波斯猫', 'name': '小黑', 'sex': '公'}

651
来自专栏Android群英传

Kotlin之旅——类特性

722
来自专栏算法channel

Python|继承,多态,鸭子类型

01 继承 编写一个类 class Animal(object): def shout(self): print('Animal i...

34111
来自专栏PhpZendo

带你入门 JavaScript ES6 (四)

使用类声明是,需要先声明类,然后才能访问,否则抛出ReferenceError。这一点不同于函数声,函数声明会提升作用域,而无需事先声明

351
来自专栏肖洒的博客

继承和多态

这里继承和多态的概念与java的概念差不多。概念还是需要多次理解才能透彻。感觉类和实例的概念还是不能深刻理解。再次复习下吧。

473
来自专栏张善友的专栏

面向对象设计的SOLID原则

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。 SRP The Sin...

2016
来自专栏函数式编程语言及工具

FunDA(17)- 示范:异常处理与事后处理 - Exceptions handling and Finalizers

    作为一个能安全运行的工具库,为了保证占用资源的安全性,对异常处理(exception handling)和事后处理(final clean-up)的支持...

1747

扫码关注云+社区