《Java、Android等等面试》收集Android

Activity启动流程

2021-02-21  本文已影响0人  flynnny

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

基础知识

13.png

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

17.png

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

14.png

TaskRecord:记录栈里有哪些activity

15.png

ActivityStack

16.png

Instrumentation

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

19.png

启动细节(三个阶段)

20.png 21.png 22.png
上一篇下一篇

猜你喜欢

热点阅读