從這個(gè)篇章開始,簡(jiǎn)單總結(jié)下Android系統(tǒng)的啟動(dòng)流程,屬于framework學(xué)習(xí)的基礎(chǔ)總結(jié)。
先從如下圖了解下Android系統(tǒng)的分層:

圖解: Android系統(tǒng)啟動(dòng)過程由上圖從下往上的一個(gè)過程:Loader -> Kernel -> Native -> Framework -> App,接來下按從下到上的順序簡(jiǎn)要介紹下每層:
Loader層:激活Kernel。
- 啟動(dòng)電源以及系統(tǒng)啟動(dòng):當(dāng)電源按下時(shí)引導(dǎo)芯片代碼將固化在ROM中的引程序Bootloader加載到RAM,然后執(zhí)行。
- 引導(dǎo)程序Bootloader:它是Android操作系統(tǒng)開始運(yùn)行前的一個(gè)小程序,負(fù)責(zé)把系統(tǒng)OS拉起來并運(yùn)行。
- linux內(nèi)核啟動(dòng):內(nèi)核啟動(dòng)時(shí),設(shè)置緩存、被保護(hù)存儲(chǔ)器、計(jì)劃列表,加載驅(qū)動(dòng)等,為最終調(diào)用系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境。
Kernel層:Android內(nèi)核空間,到這里才剛剛開始進(jìn)入Android系統(tǒng)。
Bootloader啟動(dòng)Kernel的swapper進(jìn)程(pid=0),它是內(nèi)核首個(gè)進(jìn)程,用于初始化進(jìn)程管理、內(nèi)存管理、加載各種驅(qū)動(dòng)。更重要的是啟動(dòng)如下兩個(gè)重要進(jìn)程:
- init進(jìn)程(pid=1):用戶進(jìn)程的鼻祖
- threadd進(jìn)程(pid=2):內(nèi)核進(jìn)程的鼻祖
這層真正大主管是threadd進(jìn)程,會(huì)創(chuàng)建內(nèi)核工作線程kworkder,軟中斷線程ksoftirqd,thermal等內(nèi)核守護(hù)進(jìn)程。
Native層:進(jìn)入用戶空間。
這層init進(jìn)程(pid=1)是大主管。它負(fù)責(zé)孵化各種系統(tǒng)級(jí)服務(wù)、守護(hù)進(jìn)程等。最重要的是孵化出Zygote進(jìn)程:Java進(jìn)程的鼻祖。
- Media Server進(jìn)程:負(fù)責(zé)啟動(dòng)和管理整個(gè)C++ framework,包含AudioFlinger,Camera Service等服務(wù)。
Framework層:在Native之上,也是用戶空間,主要給app層提供api以及系統(tǒng)服務(wù)。
這層大主管是 Zygote進(jìn)程。它負(fù)責(zé)注冊(cè)Zygote Socket服務(wù)端套接字,加載虛擬機(jī),preloadClasses和preloadResouces。
- System Server進(jìn)程:負(fù)責(zé)啟動(dòng)和管理整個(gè)Java framework,包含AMS、WMS、PMS等服務(wù)。
App層:應(yīng)用程序。
所有的App進(jìn)程都是由Zygote進(jìn)程fork生成的。
參考:
http://gityuan.com/android/
系列文章:
Android系統(tǒng)啟動(dòng)(一)-開篇
Android系統(tǒng)啟動(dòng)(二)-Init篇
Android系統(tǒng)啟動(dòng)(三)-Zygote篇
Android系統(tǒng)啟動(dòng)(四)-SystemServer篇
Android系統(tǒng)啟動(dòng)(五)-ActivityManagerService篇
Android系統(tǒng)啟動(dòng)(六)-Launcher篇