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

相关文章

来自专栏技术小黑屋

探究android:largeHeap

在日常的Android开发中,我们必然遇到过OutOfMemoryError这样的崩溃,产生的原因无外乎两点,一是内存过小不够用,二是程序设计有误,导致不能释放...

943
来自专栏MasiMaro 的技术博文

hook键盘驱动中的分发函数实现键盘输入数据的拦截

我自己在看《寒江独钓》这本书的时候,书中除了给出了利用过滤的方式来拦截键盘数据之外,也提到了另外一种方法,就是hook键盘分发函数,将它替换成我们自己的,然后再...

692
来自专栏琯琯博客

原生 PHP、Laravel5.4、Yii2 和 ThinkPHP3.2 中的事务实例

一、原生 MySQL <?php // 开启一个事务 mysql_query('START TRANSACTION'); $res1 = mysql_quer...

3295
来自专栏点滴积累

geotrellis使用(三十九)COG 写入更新

前言 前面介绍过了如何在 ETL 的时候更新 Layer,使得能够在大数据量的时候完成 ETL 操作,同时前两篇文章也介绍了 COG 以及如何在 Geotrel...

37812
来自专栏Flutter入门到实战

实现Android主流网络框架封装,可无缝侵入切换框架

先来描述一下需求,比如说,目前正在用的http请求是Volley,现在发现使用OkHttp来封装一套会更好。又比方说,目前正在用的数据存储方案是OrmLite,...

922
来自专栏xingoo, 一个梦想做发明家的程序员

基于配置的Spring AOP

前面几篇学习了Spring的依赖注入,这篇开始学习另一个核心功能——面向切面编程AOP。 通过本文,你可以了解到:  1 Spring xml规范 ...

1915
来自专栏漫漫深度学习路

tensorflow:使用tfrecords时的注意事项

使用 tfrecords 时的注意事项 确保 string_input_producer 中的文件名字是正确的。 string_input_producer(...

2108
来自专栏Hongten

python开发_tkinter_单选按钮

E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

842
来自专栏用户画像

1.2.4 计算机的工作过程

3)用程序的首地址从存储器中取出第一条指令,经过译码、执行等步骤控制计算机各功能部件协同运行,完成这条指令功能,并计算下一条指令的地址。

723
来自专栏JadePeng的技术博客

Mongodb 定时释放内存

对于主要是写入的数据库,mongodb内存占满之后写入效率会变得不稳定 这个时候,你需要释放内存(可试用db.runCommand({closeAllDatab...

4097

扫码关注云+社区