一、引入init進程
1、啟動電源以及系統(tǒng)啟動
當電源按下時引導芯片代碼從預定義的地方(固話在ROM)開始執(zhí)行肴沫。加載引導程序BootLoader到RAM中粟害,然后執(zhí)行
2蕴忆、引導程序BootLoader
引導程序BootLoader是在Android操作系統(tǒng)開始運行前的一個小程序,他的主要作用是把系統(tǒng)OS拉起來并運行悲幅。
3套鹅、Linux 內(nèi)核啟動
當內(nèi)核啟動時站蝠,設(shè)置緩存、被保護存儲器卓鹿、計劃列表菱魔、加載驅(qū)動。在內(nèi)核完成系統(tǒng)設(shè)置后吟孙,他首先在系統(tǒng)文件中尋找init.rc澜倦,并啟動init進程。
4杰妓、init進程啟動
init進程做的工作比較多藻治,主要用來初始化和啟動屬性服務,也用來啟動Zygote進程巷挥。
二桩卵、init進程啟動總結(jié)
1、創(chuàng)建和掛載啟動所需的文件目錄倍宾。
2雏节、初始化和啟動屬性服務。
3高职、解析init.rc配置文件并啟動Zygote進程钩乍。
三、Zygote進程啟動總結(jié)
1怔锌、創(chuàng)建AppRuntime并調(diào)用其start方法件蚕,啟動Zygote進程。
2产禾、創(chuàng)建Java虛擬機并為Java虛擬機注冊JNI方法排作。
3、通過JNI調(diào)用ZygoteInit的main函數(shù)進入Zygote的Java框架層亚情。
4妄痪、通過registerZygoteSocket方法創(chuàng)建服務器端Socket,并通過runSelectLoop方法等待AMS的請求來創(chuàng)建新的應用程序進程楞件。
5衫生、啟動SystemServer進程。
四土浸、SystemServer進程總結(jié)
1罪针、啟動Binder線程池,這樣就可以與其他進程進行通信黄伊。
2泪酱、創(chuàng)建SystemServiceManager,其用于對系統(tǒng)的服務進行創(chuàng)建、啟動和生命周期管理墓阀。
3毡惜、啟動各種服務。