Activity启动流程

Android面试季必问——AMS的核心原理 系列
Android启动流程 https://www.jianshu.com/p/f66f639c59d3
AMS启动和应用 https://www.jianshu.com/p/8f0d372b0a34
Activity启动流程 https://www.jianshu.com/p/53d63374619d

基础知识

Activity启动流程_第1张图片
13.png

ActivityStackSupervisor:AMS创建,整个AMS只有一个对象,用来管理ActivityStack

Activity启动流程_第2张图片
17.png

HomeStack:桌面程序
FocusedStack:启动app启动起来了的焦点
ActivityRecord:activity的信息记录在ActivityRecord对象,并通过成员变量task指向TaskRecord

Activity启动流程_第3张图片
14.png

TaskRecord:记录栈里有哪些activity

Activity启动流程_第4张图片
15.png

ActivityStack

Activity启动流程_第5张图片
16.png

Instrumentation

startActivity

通信简图

Activity启动流程_第6张图片
18.png

先看有几个进程 ,然后思考是怎么跨进程通信的

launcher进程
跟AMS沟通, AMS属于system_server进程
zygote fork出一个进程
app进程

1、launcher跟AMS通信:服务都是放在ServiceManager里的(AMS也属于一个Binder服务,会被加到ServiceManager里的).需要时向他要会返回一个amsproxy代理对象。就能调用AMS里的startActivity方法。AMS验证权限,做一些准备后启动activity
2如果进程不存在请求zygote fork出进程。这里使用的不是Binder,是socket。
*为什么不用bind:Binder里有很多线程在跑。fork会把进程里面当前线程复制过去,当线程里某个资源被其他资源锁住时,当fork后线程信息丢失了(fork原理),最后没有开锁的钥匙了导致死锁。socket会把其他线程停掉,fork后是干净的
3新的应用进程和AMS通信:app很容易获取到AMS

Activity启动流程_第7张图片
19.png

启动细节(三个阶段)

Activity启动流程_第8张图片
20.png
Activity启动流程_第9张图片
21.png
Activity启动流程_第10张图片
22.png

你可能感兴趣的:(Activity启动流程)