Android 系統(tǒng)啟動

一室谚、Android 啟動過程

1毡鉴、啟動電源以及系統(tǒng)啟動
當(dāng)電源按下時引導(dǎo)芯片代碼從預(yù)定義的代碼可以執(zhí)行崔泵,加載BootLoader到RAM中,然后執(zhí)行眨补。

2管削、引導(dǎo)程序BootLoader
引導(dǎo)程序BootLoader是在Android操作系統(tǒng)開始運行之前的一個小程序,它的主要作用是把系統(tǒng)OS拉起來并運行撑螺。

3、Linux內(nèi)核的啟動
當(dāng)系統(tǒng)啟動時崎弃,設(shè)置緩存甘晤、計劃列表、加載驅(qū)動等饲做,在內(nèi)核完成系統(tǒng)設(shè)置后线婚,它首先在系統(tǒng)文件中尋找init.rc文件,并啟動init進(jìn)程盆均。

4塞弊、init進(jìn)程啟動
主要用來初始化和啟動屬性服務(wù),也用來啟動Zygote進(jìn)程泪姨。

二游沿、init進(jìn)程啟動總結(jié)

init進(jìn)程是Android 系統(tǒng)中用戶空間的第一個進(jìn)程,進(jìn)程號為1肮砾,是Android系統(tǒng)啟動進(jìn)程中一個關(guān)鍵的步驟诀黍,它被賦予了很多極其重要的工作職責(zé)。

init進(jìn)程啟動做了很多工作仗处,總的來說主要做了以下三件事:
1眯勾、創(chuàng)建和掛載啟動所需的文件目錄。
2婆誓、初始化和啟動屬性服務(wù)
3吃环、解析init.rc配置文件并啟動Zygote進(jìn)程。

三洋幻、Zygote進(jìn)程啟動過程

1郁轻、Zygote概述
? ? ? ? ?在Android 系統(tǒng)中,DVM(Dalvik虛擬機)和ART鞋屈、應(yīng)用程序進(jìn)程以及運行系統(tǒng)的關(guān)鍵服務(wù)的SystemServer進(jìn)程都是由Zygote進(jìn)程創(chuàng)建的范咨,我們將它稱為孵化器。它通過fock(復(fù)制進(jìn)程)的形式來創(chuàng)建應(yīng)用程序進(jìn)程和SystemServer進(jìn)程厂庇,由于Zygote進(jìn)程在啟動時會創(chuàng)建DVM或者ART,因此通過fock而創(chuàng)建的應(yīng)用程序進(jìn)程和SystemServer進(jìn)程可以在內(nèi)部獲取一個DVM或者ART的實例副本渠啊。

2、Zygote進(jìn)程的啟動
? ? ? ? init啟動Zygote時主要是調(diào)用app_main.cpp的main函數(shù)中的AppRuntime.cpp的start方法來啟動Zygote進(jìn)程的权旷。(可以app_main.cpp和AppRuntime.cpp)替蛉。

? ? ? ?在AppRuntime.cpp的start方法中贯溅,會啟動Java虛擬機、為Java虛擬機注冊JNI方法躲查、通過JNI調(diào)用ZygoteInit的main方法它浅。? 為什么要使用JNI呢?因為ZygoteInit.java是用Java語音編寫的镣煮,當(dāng)前運行的邏輯在Native中姐霍,這就需要通過JNI來調(diào)用Java。這樣Zygote就從Native層進(jìn)入了Java框架層典唇。

? ? ? ?可以閱讀ZygoteInit.java的main方法镊折。在該方法中做了四件重要的事。
a介衔、創(chuàng)建Server端的Socket恨胚,socketName的值為“zygote”
? ? ? ? ? ?zygoteServer.registerServerSocket(socketName)
? ? ? 這個Socket用于等待ActivityMangerService請求Zygote來創(chuàng)建新的應(yīng)用程序進(jìn)程。

b炎咖、預(yù)加載類和資源
? ? ? ? ? ?preload(bootTimeingsTraceLog)

c赃泡、啟動SystemServer進(jìn)程
? ? ? ? ? ?startSystemServer(...)
? ? ? ? ? ?這樣系統(tǒng)服務(wù)也會由SystemServer進(jìn)程啟動起來

d、等待AMS請求創(chuàng)建新的應(yīng)用程序進(jìn)程
? ? ? ? ? ?zygoteServer.runSelectLoop(..)

四乘盼、SystemServer處理過程

? ? ? ? ? SystemServer主要是用于創(chuàng)建系統(tǒng)服務(wù)升熊,比如AMS、WMS蹦肴、PMS都是由它創(chuàng)建的僚碎。(還是ZygoteInit.java類)
? ? ? ? ? 在啟動SystemServer時會調(diào)用ZygoteInit的zygoteInit(),在該方法中做了兩個重要的事。

1阴幌、啟動Binder線程池
? ? ? ? ZygoteInit.nativeZygoteInit()//調(diào)用native層的代碼勺阐,用來啟動Binder線程池。
啟動了Binder線程池矛双,這樣SystemServer進(jìn)程就可以使用Binder與其他進(jìn)程通信了渊抽。

2、RuntimeInit.applicationInit(...)
? ? ? ? ?進(jìn)入SystemServer的main(),在該方法中調(diào)用了run()

run()中創(chuàng)建消息Looper议忽、加載動態(tài)庫lib懒闷、創(chuàng)建SSM(SystemServerManager)
SSM會對系統(tǒng)服務(wù)進(jìn)行創(chuàng)建、啟動和生命周期的管理栈幸。

官方把系統(tǒng)服務(wù)分為三種類型:引導(dǎo)服務(wù)愤估、核心服務(wù)、其他服務(wù)速址。

創(chuàng)建Binder線程池玩焰。

創(chuàng)建SystemServiceManager,其用于對系統(tǒng)的服務(wù)進(jìn)行創(chuàng)建、啟動和生命周期管理芍锚。

啟動各種系統(tǒng)服務(wù)昔园。

五蔓榄、Launcher啟動過程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市默刚,隨后出現(xiàn)的幾起案子甥郑,更是在濱河造成了極大的恐慌,老刑警劉巖荤西,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澜搅,死亡現(xiàn)場離奇詭異,居然都是意外死亡邪锌,警方通過查閱死者的電腦和手機店展,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秃流,“玉大人,你說我怎么就攤上這事柳弄〔罢停” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵碧注,是天一觀的道長嚣伐。 經(jīng)常有香客問我,道長萍丐,這世上最難降的妖魔是什么轩端? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮逝变,結(jié)果婚禮上基茵,老公的妹妹穿的比我還像新娘。我一直安慰自己壳影,他們只是感情好拱层,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宴咧,像睡著了一般根灯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掺栅,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天烙肺,我揣著相機與錄音,去河邊找鬼氧卧。 笑死桃笙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的假抄。 我是一名探鬼主播怎栽,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼丽猬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熏瞄?” 一聲冷哼從身側(cè)響起脚祟,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎强饮,沒想到半個月后由桌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡邮丰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年行您,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剪廉。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡娃循,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斗蒋,到底是詐尸還是另有隱情捌斧,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布泉沾,位于F島的核電站捞蚂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跷究。R本人自食惡果不足惜姓迅,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俊马。 院中可真熱鬧丁存,春花似錦、人聲如沸潭袱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屯换。三九已至编丘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彤悔,已是汗流浹背嘉抓。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晕窑,地道東北人抑片。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像杨赤,于是被迫代替她去往敵國和親敞斋。 傳聞我的和親對象是個殘疾皇子截汪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容