1. Boot系統(tǒng)初始化, 具體過(guò)程參見(jiàn)(system\core\init\Init.c)中的main函數(shù),這時(shí)候,手機(jī)或者模擬器出現(xiàn)的畫(huà)面是一個(gè)console,顯示“ANDROID”msg。
2. 初始化成功后,就開(kāi)始mounting系統(tǒng),具體參見(jiàn)(system\core\mountd\Mountd.c) 中的main函數(shù)。
3.接下來(lái)運(yùn)行ndroidRuntime,并開(kāi)始啟動(dòng)java虛擬機(jī)dalvikvm。
4. Java虛擬機(jī)啟動(dòng)成功后,開(kāi)始系統(tǒng)初始化。系統(tǒng)初始的第一步是用JNI方式實(shí)現(xiàn)的,對(duì)應(yīng)java代碼為(frameworks\base\services\java\com\android\server\SystemServer.java) init1(Native)函數(shù),對(duì)應(yīng)的JNI C++代碼為(frameworks\base\core\jni\server\com_android_server_SystemServer.cpp),而實(shí)現(xiàn)的C++代碼為
(frameworks\base\cmds\system_server\library\ System_init.cpp) 中的system_init()函數(shù)。
5. system_init調(diào)用SurfaceFlinger,SurfaceFlinger的readyToRun()函數(shù)用BootAnimation來(lái)實(shí)現(xiàn)開(kāi)機(jī)動(dòng)畫(huà),這時(shí)候手機(jī)或者模擬器顯示是一副背景圖加一個(gè)動(dòng)態(tài)的小機(jī)器人。
6. 系統(tǒng)初始化的第二步,將啟動(dòng)ServerThread進(jìn)程,參見(jiàn)SystemServer.init2()。ServerThread將啟動(dòng)各種系統(tǒng)服務(wù),如Power Manager、Activity Manager等等,具體參見(jiàn)ServerThread的run函數(shù),ServerThread同在SystemServer.java中。
7.這之后的事,應(yīng)該就是進(jìn)入系統(tǒng)了。(這部分沒(méi)有調(diào)查過(guò))。
轉(zhuǎn)自:
http://blog.sina.com.cn/baiduman2010