Android的系統(tǒng)啟動流程和應(yīng)用啟動流程

本篇文章主要介紹按下電源鍵開機(jī)后發(fā)生的事情悲关,和你按下桌面上的一個應(yīng)用圖標(biāo)后發(fā)生的事情胆绊。下面就讓我們一起來探索系統(tǒng)啟動和App啟動的前世今生吧间影。

本文的關(guān)鍵是三張示意圖,基本上全文都是圍繞這三張圖的一個解釋晴氨,請一定對照著圖片閱讀本文康嘉。另外,吃水不忘挖井人籽前,感謝這三張神圖的原作者亭珍,他們都是承載我們的巨人,讓我們站的更高枝哄,看得更遠(yuǎn)肄梨,走的更穩(wěn)。

Android系統(tǒng)啟動流程

在此之前挠锥,你需要首先了解Android系統(tǒng)的分層架構(gòu)众羡,詳見我的另一篇文章Android系統(tǒng)架構(gòu)簡介
Android系統(tǒng)啟動過程可以分為三個階段:Bootloader引導(dǎo)、Linux kernel啟動蓖租、Android啟動粱侣。詳見下圖:

Android系統(tǒng)啟動流程
  1. BootLoader引導(dǎo)
    BootLoader是一段引導(dǎo)程序,類似于Windows開機(jī)時的出現(xiàn)第一個畫面(有品牌商標(biāo)的那個)時的運(yùn)行程序蓖宦。顧名思義齐婴,它的任務(wù)是配置軟硬件環(huán)境,引導(dǎo)操作系統(tǒng)的啟動球昨。

  2. Linux kernel啟動
    我們知道Android系統(tǒng)的最底層是Linux尔店,所以眨攘,BootLoader引導(dǎo)程序結(jié)束后會執(zhí)行Linux內(nèi)核主慰。Linux kernel會依次啟動:

  • init進(jìn)程:第一個用戶級進(jìn)程嚣州。
  • servicemanager服務(wù):所有servcie使用前都要在這里注冊。
  • Zygote進(jìn)程:如圖所示共螺,通過Android Runtime運(yùn)行虛擬機(jī)该肴,然后啟動Zygote進(jìn)程。
  1. Android啟動
  • Zygote進(jìn)程:負(fù)責(zé)虛擬機(jī)的初始化藐不。它是Android系統(tǒng)中第一個進(jìn)程(注意與前面的init進(jìn)程區(qū)分)匀哄,也是之后所有進(jìn)程的母進(jìn)程,其他進(jìn)程都是有此fork出來雏蛮∠呀溃考慮到zygote翻譯為“受精卵”,這一點(diǎn)就比較好理解了挑秉。
  • SystemServer:超級管理進(jìn)程法梯,啟動所有系統(tǒng)核心服務(wù),負(fù)責(zé)Android系統(tǒng)的初始化工作犀概。由Zygote孵化出來立哑,是Zygote進(jìn)程的第一個子進(jìn)程。SystemServer會啟動很多服務(wù)姻灶,如ActiivityManagerService铛绰,WindowManagerService等。
  • ActivityManagerService:由SystemServer來啟動产喉,System Service -> Activity Manager Service -> Launcher
  • Home進(jìn)程:第一個app進(jìn)程捂掰,打開第一個Activity應(yīng)用Launcher,也就是我們的桌面應(yīng)用曾沈。安裝應(yīng)用程序時會在launcher出現(xiàn)對應(yīng)圖標(biāo)尘颓,所以說我們的桌面也是一個app。

Android應(yīng)用啟動流程

一張圖說明應(yīng)用的啟動流程晦譬。


app啟動流程

上面提到疤苹,Launcher本身就是一個應(yīng)用程序,所以我們啟動app時的本質(zhì)是對Launcher這個app進(jìn)行操作敛腌。如圖所示卧土,launcer接收到點(diǎn)擊事件時調(diào)用startActivity方法,進(jìn)行activity的跳轉(zhuǎn)像樊。但是與我們平時開發(fā)app有所不同尤莺,我們要啟動的Activity所在的app運(yùn)行在另外一個進(jìn)程中,這就涉及到跨進(jìn)程通信(IPC生棍,Inter-Process Communication)颤霎。

Android中通過ActivityManagerService來實(shí)現(xiàn)和管理IPC,但是它不能直接讓開發(fā)者接觸到,而是用ActivityManager友酱,WifiManager晴音,LocationManager,WindowsManager等作為入口缔杉。我們這里用到的是ActivityManager锤躁,下面來詳細(xì)分析這個過程:

  1. Launcher所在進(jìn)程通過binder發(fā)送消息給system_server進(jìn)程;

  2. system_server進(jìn)程調(diào)用Process.start()方法向Zygote進(jìn)程發(fā)出創(chuàng)建新進(jìn)程請求或详。關(guān)于system server在上面的系統(tǒng)啟動流程中有提到系羞,它是zygote的第一個子進(jìn)程。

  3. zygote進(jìn)程fork自身,開啟一個Linux進(jìn)程和一個主線程霸琴。ZygoteInit.main()方法來實(shí)例化Activity Thread對象椒振,并最終返回新進(jìn)程的pid給ActivityManagerService.

  4. ActivityThread隨后依次調(diào)用Looper.prepareLoop()和Looper.loop()來開啟消息循環(huán).

  5. 通過ActivityThread把新建的進(jìn)程和Application綁定,然后加載app的classes到內(nèi)存中

  6. 啟動 Activity梧乘。

可以看出杠人,啟動一個app的關(guān)鍵是新建一個進(jìn)程,關(guān)于新建進(jìn)程的詳細(xì)過程可參照下圖宋下,這里不再展開:


進(jìn)程的創(chuàng)建流程

到這里嗡善,關(guān)于系統(tǒng)啟動流程和應(yīng)用啟動流程就解釋完了,希望對你有所幫助学歧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罩引,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子枝笨,更是在濱河造成了極大的恐慌袁铐,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件横浑,死亡現(xiàn)場離奇詭異剔桨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)徙融,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門洒缀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人欺冀,你說我怎么就攤上這事树绩。” “怎么了隐轩?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵饺饭,是天一觀的道長。 經(jīng)常有香客問我职车,道長瘫俊,這世上最難降的妖魔是什么鹊杖? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮扛芽,結(jié)果婚禮上骂蓖,老公的妹妹穿的比我還像新娘。我一直安慰自己胸哥,他們只是感情好涯竟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布赡鲜。 她就那樣靜靜地躺著空厌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪银酬。 梳的紋絲不亂的頭發(fā)上嘲更,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音揩瞪,去河邊找鬼赋朦。 笑死,一個胖子當(dāng)著我的面吹牛李破,可吹牛的內(nèi)容都是我干的宠哄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼嗤攻,長吁一口氣:“原來是場噩夢啊……” “哼毛嫉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妇菱,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤承粤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闯团,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辛臊,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年房交,在試婚紗的時候發(fā)現(xiàn)自己被綠了彻舰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡候味,死狀恐怖淹遵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情负溪,我是刑警寧澤透揣,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站川抡,受9級特大地震影響辐真,放射性物質(zhì)發(fā)生泄漏须尚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一侍咱、第九天 我趴在偏房一處隱蔽的房頂上張望耐床。 院中可真熱鬧,春花似錦楔脯、人聲如沸撩轰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堪嫂。三九已至,卻和暖如春木柬,著一層夾襖步出監(jiān)牢的瞬間皆串,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工眉枕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恶复,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓速挑,卻偏偏與公主長得像谤牡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姥宝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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