Android的啟動過程

1、BootLoad:電源鍵按下,引導(dǎo)芯片代碼從預(yù)定義的地方(ROM)開始執(zhí)行,加載引導(dǎo)程序到RAM中執(zhí)行,主要初始化硬件設(shè)備和建立內(nèi)存空間映射圖,目的是為操作系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境;

2、Kernel:Android內(nèi)核開始啟動,主要設(shè)置緩存和加載驅(qū)動等,當(dāng)內(nèi)核系統(tǒng)設(shè)置完畢,會在系統(tǒng)文件中尋找“init”文件,啟動root進(jìn)程(第一個進(jìn)程);

3、Init進(jìn)程:由內(nèi)核自行啟動的一個用戶級進(jìn)程,啟動過程就是init.c中main函數(shù)的執(zhí)行過程,包括文件夾建立、掛載、rc文件解析、啟動服務(wù)、屬性設(shè)置等,其中.rc文件是Android初始化的腳本文件;

4、Zygote進(jìn)程:系統(tǒng)啟動過程中,由init進(jìn)程創(chuàng)建,它是Native應(yīng)用程序,與驅(qū)動內(nèi)核無關(guān),由它來fork出所有的應(yīng)用程序進(jìn)程和系統(tǒng)服務(wù)進(jìn)程,作用是作為一個虛擬機(jī)進(jìn)程,預(yù)加載和初始化核心庫類,讓Dalvik虛擬機(jī)共享代碼、降低內(nèi)存占用和啟動時間;

-------Zygote進(jìn)程包括兩個模塊:Socket服務(wù)端(用于接受啟動新的Dalvik虛擬機(jī)命令)和Framewo共享類和共享資源;

-------Zygote啟動分為兩個階段:虛擬機(jī)啟動(通過Native啟動---啟動虛擬機(jī)、初始化、注冊JNI函數(shù)、構(gòu)造java運(yùn)行時環(huán)境)和SystemService進(jìn)程(通過java啟動---注冊socket監(jiān)聽、加載系統(tǒng)資源和常用類、啟動系統(tǒng)服務(wù)進(jìn)程、進(jìn)入循環(huán)監(jiān)聽模式、進(jìn)程退出時關(guān)閉socket監(jiān)聽);

5、啟動系統(tǒng)服務(wù);

6、引導(dǎo)完成。

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,039評論 25 709
  • 1:InputChannel提供函數(shù)創(chuàng)建底層的Pipe對象 2: 1)客戶端需要新建窗口 2)new ViewRo...
    自由人是工程師閱讀 5,715評論 0 18
  • 從開機(jī)到桌面的過程為:Bootloader ?Kernel ?Init進(jìn)程 ? Zygote ? SystemSe...
    小莊bb閱讀 345評論 0 0
  • 晨起,拉開窗簾,春日晴方好。爸爸不由點(diǎn)頭,“唔,出太陽了,天氣不錯,你們今天可以下樓了呢!” 丫頭聞言,雙手支著小...
    小雎閱讀 254評論 1 1
  • 浪淘沙 劉禹錫 莫道讒言如浪深, 莫言遷客似沙沉。 千淘萬漉雖辛苦, 吹盡狂沙始到金。
    喜亭_bf8f閱讀 243評論 2 4

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