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);
Task和backStack(本篇章核心)的更多相关文章
- Scalaz(45)- concurrency :Task-函数式多线程编程核心配件
我们在上一节讨论了scalaz Future,我们说它是一个不完善的类型,最起码没有完整的异常处理机制,只能用在构建类库之类的内部环境.如果scalaz在Future类定义中增加异常处理工具的话,用户 ...
- Activity篇章参考
附上学习这部分知识的时候收集的一些比较好的链接: Task and backStack|Android Developer adb shell dumpsys activity 单个apk多进程 Ac ...
- Android--Task和BackStack高级
前言 之前的博客讲到了Android下Activity的启动模式,涉及到了Task和BackStack的内容,对这些不熟悉的朋友,可以先去看看:Android--Activity的启动模式.这篇博客主 ...
- Spark之RDD容错原理及四大核心要点
一.Spark RDD容错原理 RDD不同的依赖关系导致Spark对不同的依赖关系有不同的处理方式. 对于宽依赖而言,由于宽依赖实质是指父RDD的一个分区会对应一个子RDD的多个分区,在此情况下出现部 ...
- 【C# Task】理解Task中的ConfigureAwait配置同步上下文
原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获 ...
- 深入Activity
此刻,你应该静下心来,在阅读中思考.在思考中进步,读完本篇文章的你一定会有不一样的收获,请让我们共同进步! 核心内容 1.Activity数据交换 2.Activity中的任务栈 3.Activity ...
- 死磕 java线程系列之自己动手写一个线程池
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...
- 用gulp构建你的前端项目
前言 前端技术发展日新月异,随着模块化.组件化的提出,前端变得越来越复杂,静态资源越来越多,那么对静态资源的处理,如压缩,合并,去掉调试信息.. 如果还是人工去处理,效率非常之低且还容易出错,于是自动 ...
- Darwin Streaming Server 简介
Darwin Streaming Server 概要 Darwin Streaming Server简称DSS.DSS是Apple公司提供的开源实时流媒体播放服务器程序.整个程序使用C++编写 ...
随机推荐
- HDU1042(N!)题解
HDU1042(N!)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 计算N的阶乘并输出. [题目分析] 题给范围上限是10000,那么毫无疑问是大数题.之前我整理过各种 ...
- DOS 根据用户输入执行指令判断IF
@echo off set /p op="输入指令:" if "%op%" == "1" ( echo 你输入了指令1 ) if " ...
- 修改vim默认tab为4个空格与显示行号
添加一个.vimrc配置文件即可. 在home目录下 vim .vimrc # 添加如下内容 set ts=4 set expandtab set nu 然后再次用vim打开任意文件,就看见效果啦!
- Linux08--Shell程序设计03 shell script
第一个Shell脚本——HelloWorld [root@localhost ~]# vi sh01.sh #!/bin/bash #!表明使用哪种shell # this is my first s ...
- DenyHosts 安装及配置详解
DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP ...
- Java - 字符串和Unicode互转 - 解析小米pm.min.js
小米JS地址: http://p.www.xiaomi.com/zt/20130313/huodong/pm.min.js 上面这个JS是小米抢手机页面的代码.和抢手机有直接关联.. 虽然我3次都没抢 ...
- qt介绍
http://www.oschina.net/p/qt Qt 是一个跨平台的C++图形用户界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序. ...
- C语言的本质(1)——计算机与二进制
人类的计数方式通常是"逢十进一",称为十进制(Decimal),大概因为人有十个手指,所以十进制是最自然的计数方式,各民族的文字中都有十个数字,而阿拉伯数字0-9是目前最广泛采用的 ...
- KO.js学习笔记(一)
1.官方网站:knockoutjs.com 2.要dom树加载完毕才能绑定数据 3.ui能实时更新,使用了ko的一个自定义属性:data-bind 4.可以对viewmodel中的属性添加subsci ...
- 【HDU】1717 小数化分数2 ——计数原理
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...