Read The Fucking Source Code
引言
App的啟動(dòng)流程就是Activity的生命周期嗎佣谐?
也對(duì),但是這種理解太淺顯了
大道至簡(jiǎn)(Android Q — API 29)
頂層視角:具體到每一次IPC調(diào)用
抽絲剝繭
Step1:Launcher點(diǎn)擊啟動(dòng)乃秀,向AMS請(qǐng)求
Step2:AMS向Launcher進(jìn)程發(fā)送Pause
Step3:Launcher處理Pause后,反饋Pause給AMS
Step4:AMS向Zygote進(jìn)程發(fā)起新進(jìn)程創(chuàng)建請(qǐng)求
Step5:Zygote進(jìn)程創(chuàng)建新進(jìn)程妓忍,新進(jìn)程啟動(dòng)
Step6:新進(jìn)程啟動(dòng)唱星,向AMS發(fā)送應(yīng)用啟動(dòng)準(zhǔn)備請(qǐng)求
Step7:AMS處理啟動(dòng)數(shù)據(jù),反饋啟動(dòng)給新進(jìn)程
Step8:新進(jìn)程收到啟動(dòng)信號(hào)跌造,執(zhí)行Create杆怕、Start、Resume后壳贪,反饋Resume給AMS
Step9:AMS處理接收到的Resume
Step10:新進(jìn)程執(zhí)行完Resume后陵珍,會(huì)將一個(gè)IdleHandler添加到消息隊(duì)列,等待消息隊(duì)列空閑時(shí)违施,發(fā)送ActivityIdle給AMS
Step11:AMS處理接收到的ActivityIdle互纯,發(fā)送Stop給Launcher進(jìn)程
Step12:Launcher進(jìn)程收到Stop,處理Stop事務(wù)
千絲萬縷
?scheduleTransaction(ClientTransaction) 參考:【 Android ClientTransaction 】
Activity啟動(dòng)流程
?
問題思考
在子線程中可以更新UI嗎磕蒲?
- 這個(gè)要看更新時(shí)機(jī)伟姐,因?yàn)榫€程檢查是在ViewRootImpl中的checkThread中進(jìn)行的收苏,在ViewRootImpl創(chuàng)建前就可以在子線程更新UI亿卤。
- 那么ViewRootImpl是在什么時(shí)候創(chuàng)建的呢愤兵?是在Activity的onResume后創(chuàng)建的,所以在onResume前排吴,在子線程更新UI是沒有問題的秆乳。
?
小編的擴(kuò)展鏈接
優(yōu)秀博客參考
代碼講解透徹/圖示清晰—Gityuan全家桶
最好的時(shí)序圖—分析Android中應(yīng)用的啟動(dòng)流程
Android應(yīng)用啟動(dòng)流程分析
Android APP 啟動(dòng)流程簡(jiǎn)析
總結(jié)activity啟動(dòng)過程中View,ViewRootImpl關(guān)系
ActivityStackSupervisor钻哩,ActivityStack屹堰,ActivityRecord,TaskRecord的關(guān)系