Activity启动场景Task分析(二)
场景分析
下面通过启动Activity的代码来分析一下:
1.桌面
首先,我们看下处于桌面时的状态,运行命令:
adb shell dumpsys activity
结果如下
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):
Stack #0: //中间省略其他... Task id #102 //中间省略其他... TaskRecord{446ae9e #102 I=com.google.android.apps.nexuslauncher/.NexusLauncherActivity U=0 StackId=0 sz=1}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.google.android.apps.nexuslauncher/.NexusLauncherActivity }
Hist #0: ActivityRecord{54fa22 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t102}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.google.android.apps.nexuslauncher/.NexusLauncherActivity }
ProcessRecord{19c7c43 2203:com.google.android.apps.nexuslauncher/u0a22} Running activities (most recent first):
TaskRecord{446ae9e #102 I=com.google.android.apps.nexuslauncher/.NexusLauncherActivity U=0 StackId=0 sz=1}
Run #0: ActivityRecord{54fa22 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t102} mResumedActivity: ActivityRecord{54fa22 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t102} //省略其他
实际上就是如下图所示的结构,这里的Stack #0就是ActivityStackSupervisor中的mHomeStack,mHomeStack管理的是Launcher相关的任务。

从桌面启动一个Activity
从桌面启动一个APP,然后运行上面的命令,为了节省篇幅,这里和后面就不贴结果了,直接放图了
从桌面点击图标启动一个AActivity,可以看到,会多了一个Stack #1,这个Stack #1就是ActivityStackSupervisor中的mFocusedStack,mFocusedStack负责管理的是非Launcher相关的任务。同时也会创建一个新的ActivityRecord和TaskRecord,ActivityRecord放到TaskRecord中,TaskRecord则放进mFocusedStack中。

默认模式从A启动B
然后,我们从AActivity中启动一个BActivity,可以看到会创建一个新的ActivityRecord然后放到已有的TaskRecord栈顶。

从A启动B创建新栈
如果我们想启动的BActivity在一个新的栈中呢,我们可以用singleInstance的方式来启动BActivity。singleInstance后面也会讲到。这种方式会创建一个新的ActivityRecord和TaskRecord,把ActivityRecord放到新的TaskRecord中去。
Activity启动场景Task分析(二)的更多相关文章
- Activity启动过程源代码分析
事实上写分析源代码文章总会显得非常复杂非常乏味,可是梳理自己看源代码时的一些总结也是一种提高. 这篇博客分析下Activity启动过程源代码,我会尽量说得简单点. 个人的观点是看源代码不能看得太细,否 ...
- twitter storm源码走读之1 -- nimbus启动场景分析
欢迎转载,转载时请注明作者徽沪一郎及出处,谢谢. 本文详细介绍了twitter storm中的nimbus节点的启动场景,分析nimbus是如何一步步实现定义于storm.thrift中的servic ...
- Activity启动创建 (AcitivtyManageService,ActivityThread,Activity)
ActivityThead,ActivityManagerService,Activity <<Android内核剖析>>中有一章节专门介绍 Activity框架和管理结构A ...
- 《转》深入理解Activity启动流程(四)–Activity Task的调度算法
本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...
- 深入理解Activity启动流程(四)–Activity Task的调度算法
本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启动的概要流程 深入理解Activity启动流程(二)- ...
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
http://blog.csdn.net/vipzjyno1/article/details/25463457 Android启动模式Flags栈Task 目录(?)[+] 什么是栈 栈 ...
- 【转】Activity启动模式 及 Intent Flags 与 栈 的关联分析
http://blog.csdn.net/vipzjyno1/article/details/25463457 在学习Android的过程中,Intent是我们最常用Android用于进程内或进 ...
- Android多任务切换与Activity启动模式SingleTask之间关系的分析
这里会以多个场景列子进行分析,在分析之前先了解一下基本的概念. Task任务:一系列Activity的集合,这些Activity以栈的形式进行排列(后进先出). 那在什么时候系统会新建一个Task任务 ...
- Cocos2d-x3.3RC0的Android编译Activity启动流程分析
本文将从引擎源代码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,以下是具体分析. 1.引擎源代码Jni.部分Java层和C++层代码分析 watermark/2 ...
随机推荐
- 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)
链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...
- 【基础操作】博弈论 / SG 函数详解
博弈死我了……(话说哪个小学生会玩博弈论提到的这类弱智游戏,还取石子) 先推荐两个文章链接:浅谈算法——博弈论(从零开始的博弈论) 博弈论相关知识及其应用 This article was updat ...
- C# 各个版本特性总结
历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持.微软将C#提交给标准组织ECMA,C# 5.0目前是ECM ...
- BZOJ1124 [POI2008]枪战Maf[贪心(证明未完成)+拓扑排序]
吐槽:扣了几个小时,大致思路是有了,但是贪心的证明就是不会, 死磕了很长时间,不想想了,结果码代码又不会码.. 深深体会到自己码力很差,写很多行还没写对,最后别人代码全一二十行,要哭了 以下可能是个人 ...
- buuctf@ciscn_2019_c_1
from pwn import * context.log_level='debug' #io=remote('node3.buuoj.cn',29121) io=process('./ciscn_2 ...
- C# 常用方法—— 32位MD5加密
其他常用方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html /// <summary> /// 32位MD5加密(小写) /// ...
- linux运维、架构之路-K8s应用
一.Deployment k8s通过各种Controller管理Pod的生命周期,为了满足不同的业务场景,k8s提供了Deployment.ReplicaSet.DaemonSet.S ...
- easyui 动态添加组件 要重新渲染
做项目时动态添加组件是常有的事,easyui动态添加组件时样式会失效,这是因为这个组件没有经过 easyui的解析器解析, 比如: <pre name="code" cl ...
- cogs2039树的统计 x
2039. 树的统计 ★★ 输入文件:counttree.in 输出文件:counttree.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 关于树的统计问题 ...
- k8s中flannel:镜像下载不了
重新部署一套K8S集群时,由于K8S需要扁平化的网络,所以当执行下面的 root@master ~]# kubectl apply -f kube-flannel.yml 会开始下载镜像,然后去启动, ...