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的關係

相關文章
相關標籤/搜索