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