android系統(tǒng)架構(gòu)和工作原理

系統(tǒng)啟動(dòng)、應(yīng)用啟動(dòng)、四大組件啟動(dòng)、界面加載、時(shí)間分發(fā)

google官方android系統(tǒng)架構(gòu)圖

image.png

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

image.png

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)建

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

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