Android App启动流程

Read The Fucking Source Codeandroid

引言

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

源码版本(Android R — API 29)git

大道至简

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

Activity启动流程-概览图

抽丝剥茧

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

Activity启动流程-Step1

Step2:AMS向Launcher进程发送Pausepost

Activity启动流程-Step2

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

Activity启动流程-Step3

Step4:AMS向Zygote进程发起新进程建立请求.net

Activity启动流程-Step4

Step5:Zygote进程建立新进程,新进程启动线程

Activity启动流程-Step5

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

Activity启动流程-Step6

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

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的关系

相关文章
相关标签/搜索