android App 啟動(dòng)流程詳解

android App 啟動(dòng)流程詳解

  1. 啟動(dòng)請(qǐng)求階段
    用戶點(diǎn)擊應(yīng)用圖標(biāo):
    Launcher(桌面應(yīng)用)通過(guò) startActivity() 發(fā)送啟動(dòng)請(qǐng)求,攜帶目標(biāo)應(yīng)用的入口 Activity 信息,如包名和組件名15。

Launcher 請(qǐng)求傳遞:
啟動(dòng)請(qǐng)求通過(guò) Binder 機(jī)制傳遞給系統(tǒng)服務(wù) ActivityManagerService(AMS)進(jìn)行合法性驗(yàn)證(如權(quán)限、Intent 匹配等)15。

  1. AMS 處理請(qǐng)求
    創(chuàng)建 Task 和 ActivityRecord:
    AMS 為待啟動(dòng)的 Activity 創(chuàng)建新的 Task(任務(wù)棧)和 ActivityRecord,用于管理 Activity 的生命周期和狀態(tài)15。

調(diào)度啟動(dòng)任務(wù):
AMS 將啟動(dòng)請(qǐng)求加入系統(tǒng)主線程的消息隊(duì)列,等待調(diào)度執(zhí)行16。

  1. 應(yīng)用進(jìn)程創(chuàng)建
    Zygote 孵化新進(jìn)程:
    若目標(biāo)應(yīng)用進(jìn)程未運(yùn)行,AMS 通過(guò) Socket 向 Zygote 進(jìn)程發(fā)送請(qǐng)求,由 Zygote 調(diào)用 fork() 創(chuàng)建新進(jìn)程,繼承已預(yù)加載的類庫(kù)和資源47。

執(zhí)行 ActivityThread.main():
新進(jìn)程啟動(dòng)后,執(zhí)行 ActivityThread 的 main() 方法,初始化主線程的 Looper 和消息循環(huán)34。

  1. 組件初始化
    綁定 Application:
    ActivityThread 調(diào)用 attach() 方法向 AMS 注冊(cè)應(yīng)用進(jìn)程,隨后創(chuàng)建 Application 實(shí)例并執(zhí)行其 onCreate() 方法34。

創(chuàng)建 Activity 實(shí)例:
AMS 通過(guò) Binder 通知應(yīng)用進(jìn)程創(chuàng)建目標(biāo) Activity,觸發(fā) Activity 的生命周期方法(如 onCreate()、onStart())13。

  1. 界面顯示
    界面渲染:
    Activity 的 onResume() 方法執(zhí)行后,View 系統(tǒng)通過(guò) ViewRootImpl 完成界面測(cè)量、布局和繪制,最終通過(guò) SurfaceFlinger 合成顯示到屏幕16。

啟動(dòng)完成:
Activity 界面完全顯示后,啟動(dòng)流程結(jié)束,應(yīng)用進(jìn)入可交互狀態(tài)15。

關(guān)鍵依賴組件
Zygote:預(yù)加載系統(tǒng)資源,快速孵化應(yīng)用進(jìn)程78。
AMS:統(tǒng)一管理 Activity 生命周期和進(jìn)程調(diào)度15。
Binder IPC:跨進(jìn)程通信機(jī)制,支撐系統(tǒng)服務(wù)與應(yīng)用進(jìn)程的交互17。
此流程綜合了系統(tǒng)服務(wù)協(xié)作、進(jìn)程創(chuàng)建、組件初始化及界面渲染,核心目標(biāo)是在保證安全性和效率的前提下完成應(yīng)用啟動(dòng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容