Android App启动流程

1,231 阅读1分钟

Read The Fucking Source Code

引言

  • App 的启动流程就是 Activity 的生命周期吗?也对,但是这种理解太浅显了。

源码版本(Android R — API 29)

大道至简

顶层视角:具体到每一次IPC调用

Activity启动流程-概览图

抽丝剥茧

Step1:Launcher点击启动,向AMS请求

Activity启动流程-Step1

Step2:AMS向Launcher进程发送Pause

Activity启动流程-Step2

Step3:Launcher处理Pause后,反馈Pause给AMS

Activity启动流程-Step3

Step4:AMS向Zygote进程发起新进程创建请求

Activity启动流程-Step4

Step5:Zygote进程创建新进程,新进程启动

Activity启动流程-Step5

Step6:新进程启动,向AMS发送应用启动准备请求

Activity启动流程-Step6

Step7:AMS处理启动数据,反馈启动给新进程

Activity启动流程-Step7

Step8:新进程收到启动信号,执行Create、Start、Resume后,反馈Resume给AMS

Activity启动流程-Step8

Step9:AMS处理接收到的Resume

Activity启动流程-Step9

Step10:新进程执行完Resume后,会将一个IdleHandler添加到消息队列,等待消息队列空闲时,发送ActivityIdle给AMS

Activity启动流程-Step10

Step11:AMS处理接收到的ActivityIdle,发送Stop给Launcher进程

Activity启动流程-Step11

Step12:Launcher进程收到Stop,处理Stop事务

Activity启动流程-Step12

千丝万缕

 scheduleTransaction(ClientTransaction) 参考:【 Android ClientTransaction

Activity启动流程

问题思考

在子线程中可以更新UI吗?

  • 这个要看更新时机,因为线程检查是在ViewRootImpl中的checkThread中进行的,在ViewRootImpl创建前就可以在子线程更新UI。
  • 那么ViewRootImpl是在什么时候创建的呢?是在Activity的onResume后创建的,所以在onResume前,在子线程更新UI是没有问题的。

小编的扩展链接

《Android 视图模块 全家桶》

优秀博客参考

代码讲解透彻/图示清晰—Gityuan全家桶
最好的时序图—分析Android中应用的启动流程
Android应用启动流程分析
Android APP 启动流程简析
总结activity启动过程中View,ViewRootImpl关系
ActivityStackSupervisor,ActivityStack,ActivityRecord,TaskRecord的关系