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)核開始啟動(dòng),主要設(shè)置緩存和加載驅(qū)動(dòng)等,當(dāng)內(nèi)核系統(tǒng)設(shè)置完畢,會(huì)在系統(tǒng)文件中尋找“init”文件,啟動(dòng)root進(jìn)程(第一個(gè)進(jìn)程);
3、Init進(jìn)程:由內(nèi)核自行啟動(dòng)的一個(gè)用戶級(jí)進(jìn)程,啟動(dòng)過程就是init.c中main函數(shù)的執(zhí)行過程,包括文件夾建立、掛載、rc文件解析、啟動(dòng)服務(wù)、屬性設(shè)置等,其中.rc文件是Android初始化的腳本文件;
4、Zygote進(jìn)程:系統(tǒng)啟動(dòng)過程中,由init進(jìn)程創(chuàng)建,它是Native應(yīng)用程序,與驅(qū)動(dòng)內(nèi)核無關(guān),由它來fork出所有的應(yīng)用程序進(jìn)程和系統(tǒng)服務(wù)進(jìn)程,作用是作為一個(gè)虛擬機(jī)進(jìn)程,預(yù)加載和初始化核心庫(kù)類,讓Dalvik虛擬機(jī)共享代碼、降低內(nèi)存占用和啟動(dòng)時(shí)間;
-------Zygote進(jìn)程包括兩個(gè)模塊:Socket服務(wù)端(用于接受啟動(dòng)新的Dalvik虛擬機(jī)命令)和Framewo共享類和共享資源;
-------Zygote啟動(dòng)分為兩個(gè)階段:虛擬機(jī)啟動(dòng)(通過Native啟動(dòng)---啟動(dòng)虛擬機(jī)、初始化、注冊(cè)JNI函數(shù)、構(gòu)造java運(yùn)行時(shí)環(huán)境)和SystemService進(jìn)程(通過java啟動(dòng)---注冊(cè)socket監(jiān)聽、加載系統(tǒng)資源和常用類、啟動(dòng)系統(tǒng)服務(wù)進(jìn)程、進(jìn)入循環(huán)監(jiān)聽模式、進(jìn)程退出時(shí)關(guān)閉socket監(jiān)聽);
5、啟動(dòng)系統(tǒng)服務(wù);
6、引導(dǎo)完成。