

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)完成。