Read The Fucking Source Codeandroid
源码版本(Android R — API 29)git
顶层视角:具体到每一次IPC调用markdown
Step1:Launcher点击启动,向AMS请求oop
Step2:AMS向Launcher进程发送Pausepost
Step3:Launcher处理Pause后,反馈Pause给AMSspa
Step4:AMS向Zygote进程发起新进程建立请求.net
Step5:Zygote进程建立新进程,新进程启动线程
Step6:新进程启动,向AMS发送应用启动准备请求3d
Step7:AMS处理启动数据,反馈启动给新进程code
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 】
在子线程中能够更新UI吗?
- 这个要看更新时机,由于线程检查是在ViewRootImpl中的checkThread中进行的,在ViewRootImpl建立前就能够在子线程更新UI。
- 那么ViewRootImpl是在何时建立的呢?是在Activity的onResume后建立的,因此在onResume前,在子线程更新UI是没有问题的。
代码讲解透彻/图示清晰—Gityuan全家桶
最好的时序图—分析Android中应用的启动流程
Android应用启动流程分析
Android APP 启动流程简析
总结activity启动过程当中View,ViewRootImpl关系
ActivityStackSupervisor,ActivityStack,ActivityRecord,TaskRecord的关系