系統(tǒng)啟動(dòng)、應(yīng)用啟動(dòng)、四大組件啟動(dòng)、界面加載、時(shí)間分發(fā)
google官方android系統(tǒng)架構(gòu)圖

系統(tǒng)啟動(dòng)過(guò)程

Boot ROM和Boot Loader
RAM:隨機(jī)存儲(chǔ)內(nèi)存,俗稱運(yùn)行內(nèi)存,斷電內(nèi)容丟失
ROM:只讀內(nèi)存,俗稱硬盤,數(shù)據(jù)持久化
Boot ROM:長(zhǎng)按開機(jī)鍵,執(zhí)行ROM中預(yù)設(shè)的代碼,加載引導(dǎo)程序到RAM
Boot Loader:執(zhí)行引導(dǎo)程序檢查RAM,初始化硬件參數(shù),準(zhǔn)備啟動(dòng)系統(tǒng)
Linux Kernel(硬件驅(qū)動(dòng))
swagger進(jìn)程(又稱idle進(jìn)程)(pid=0):初始化進(jìn)程管理,內(nèi)存管理;加載驅(qū)動(dòng)程序。
kthreadd進(jìn)程(pid=2):創(chuàng)建內(nèi)核工作線程kworkder,軟中斷線程ksoftirqd,thermal等內(nèi)核守護(hù)進(jìn)程。
HAL(硬件抽象層)
硬件層的封裝,為硬件層的調(diào)用提供統(tǒng)一的調(diào)用接口
Native系統(tǒng)庫(kù)和Android Runtime
Native 系統(tǒng)庫(kù):包括init孵化的用戶守護(hù)進(jìn)程、HAL和開機(jī)動(dòng)畫。
1 init進(jìn)程孵化出ueventd、logd、healthd、installd、adbd、lmkd等用戶守護(hù)進(jìn)程
2 init進(jìn)程還啟動(dòng) servicemanager(binder服務(wù)管家)、 bootanim(開機(jī)動(dòng)畫)等重要服務(wù)
3 init進(jìn)程孵化出Zygote進(jìn)程,Zygote進(jìn)程是Android系統(tǒng)的第一個(gè)Java進(jìn)程(即虛擬機(jī)進(jìn)程), Zygote是所有Java進(jìn)程的父進(jìn)程
Android Runtime(ART)
應(yīng)用:在自己的進(jìn)程中運(yùn)行,有自己的虛擬機(jī)實(shí)例
DEX文件:Android字節(jié)碼格式文件
ART:執(zhí)行DEX,在設(shè)備運(yùn)行多個(gè)虛擬機(jī);預(yù)先(AOT)和即時(shí)(JIT)編譯,優(yōu)化垃圾回收(GC),調(diào)試相關(guān)支持
Framework
java封裝的應(yīng)用服務(wù),通過(guò)調(diào)用系統(tǒng)庫(kù)服務(wù),來(lái)實(shí)現(xiàn)具體的功能,并對(duì)應(yīng)用層提供統(tǒng)一接口
應(yīng)用層
應(yīng)用:每個(gè)app都運(yùn)行在至少一個(gè)進(jìn)程上,有自己的虛擬機(jī)實(shí)例
桌面應(yīng)用:即Launcher,Zygote孵化的第一個(gè)進(jìn)程
應(yīng)用進(jìn)程:所有的進(jìn)程都有Zygote創(chuàng)建