Read The Fucking Source Code
引言
App的启动流程就是Activity的生命周期吗?
也对,但是这种理解太浅显了
大道至简(Android Q — API 29)
顶层视角:具体到每一次IPC调用
抽丝剥茧
Step1:Launcher点击启动,向AMS请求
Step2:AMS向Launcher进程发送Pause
Step3:Launcher处理Pause后,反馈Pause给AMS
Step4:AMS向Zygote进程发起新进程创建请求
Step5:Zygote进程创建新进程,新进程启动
Step6:新进程启动,向AMS发送应用启动准备请求
Step7:AMS处理启动数据,反馈启动给新进程
Step8:新进程收到启动信号,执行Create、Start、Resume后,反馈Resume给AMS
Step9:AMS处理接收到的Resume
Step10:新进程执行完Resume后,会将一个IdleHandler添加到消息队列,等待消息队列空闲时,发送ActivityIdle给AMS
Step11:AMS处理接收到的ActivityIdle,发送Stop给Launcher进程
Step12:Launcher进程收到Stop,处理Stop事务
千丝万缕
scheduleTransaction(ClientTransaction) 参考:【 Android ClientTransaction 】
Activity启动流程
问题思考
在子线程中可以更新UI吗?
- 这个要看更新时机,因为线程检查是在ViewRootImpl中的checkThread中进行的,在ViewRootImpl创建前就可以在子线程更新UI。
- 那么ViewRootImpl是在什么时候创建的呢?是在Activity的onResume后创建的,所以在onResume前,在子线程更新UI是没有问题的。
小编的扩展链接
优秀博客参考
代码讲解透彻/图示清晰—Gityuan全家桶
最好的时序图—分析Android中应用的启动流程
Android应用启动流程分析
Android APP 启动流程简析
总结activity启动过程中View,ViewRootImpl关系
ActivityStackSupervisor,ActivityStack,ActivityRecord,TaskRecord的关系
网友评论