Activity启动流程
Android面试季必问——AMS的核心原理 系列
Android启动流程 https://www.jianshu.com/p/f66f639c59d3
AMS启动和应用 https://www.jianshu.com/p/8f0d372b0a34
Activity启动流程 https://www.jianshu.com/p/53d63374619d
基础知识
13.pngActivityStackSupervisor:AMS创建,整个AMS只有一个对象,用来管理ActivityStack
17.pngHomeStack:桌面程序
FocusedStack:启动app启动起来了的焦点
ActivityRecord:activity的信息记录在ActivityRecord对象,并通过成员变量task指向TaskRecord
TaskRecord:记录栈里有哪些activity
15.pngActivityStack
16.pngInstrumentation
startActivity
通信简图
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