Android Application啟動流程

轉(zhuǎn)載:http://www.51testing.com/html/34/n-3725434.html

??先對整體有了一個基本的認(rèn)識之后庇茫,再去看細(xì)節(jié)

談到AndroidApplication的啟動流程棺牧,很多文章都是各種源碼類和方法的一堆調(diào)用關(guān)系,這樣的文章就算看一百遍犹菱,也只是云里霧里拾稳。源碼得看,但是最好不要一下子深陷到源碼的細(xì)節(jié)之中腊脱,不可自拔访得。這里站在前人的基礎(chǔ)之上做一個總結(jié)。

  在說應(yīng)用的啟動流程之前虑椎,得先了解一下Android系統(tǒng)的啟動流程震鹉,因為Application的啟動是離不開系統(tǒng)的處理的。

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

  1.BootLoader啟動內(nèi)核和init進(jìn)程捆姜;

  2.init進(jìn)程分裂出過個守護(hù)進(jìn)程传趾,如Android Debug Damon,USB Damon,這些守護(hù)進(jìn)程會處理一些與硬件相關(guān)的接口泥技;

  3.init進(jìn)程啟動一個Zygote進(jìn)程

  Zygote進(jìn)程初始化了第一個VM浆兰,并預(yù)加載了Framework和一些通用資源。

  zygote進(jìn)程會開啟一個Socket接口珊豹,用來監(jiān)聽請求簸呈。一旦收到請求,Zygote會基于自身預(yù)先加載的VM來孵化一個新的VM店茶,并創(chuàng)建一個新的進(jìn)程蜕便。

  4.啟動Zygote之后,init進(jìn)程會啟動Runtime進(jìn)程贩幻。Zygote會孵化出一個超級管理進(jìn)程-System Server轿腺。System Server 會啟動所有系統(tǒng)核心的服務(wù)两嘴,如Activity Manager Service以及硬件相關(guān)的Service。

5.這個時候就開始準(zhǔn)備啟動它的第一個App進(jìn)程-Home進(jìn)程了族壳。

  Android系統(tǒng)已經(jīng)啟動完畢憔辫,一些核心的服務(wù)也已經(jīng)啟動完畢,然后啟動Launcher應(yīng)用仿荆,那么什么時候啟動應(yīng)用的進(jìn)程呢贰您?

 App進(jìn)程什么時候被創(chuàng)建?

  答案是被需要的時候才創(chuàng)建拢操。

  如果當(dāng)一個應(yīng)用(多是Launcher)調(diào)用App中的頁面之時锦亦,如果目標(biāo)進(jìn)程不存在,則會創(chuàng)建一個新的進(jìn)程并啟動令境。

 Application啟動流程

  在說Application啟動流程之前孽亲,先看一張前人的流程圖:

  App啟動流程

  分析流程的時候,可以同時看一下上面的流程圖展父。

  點擊桌面Icon

  然后調(diào)用StartActivity(Intent intent)方法;

  這個方法最終會通過Binder IPC的方式調(diào)用ActivityManagerService玲昧,這里簡稱AMS栖茉。

  AMS會執(zhí)行以下操作:

  最終會通過PackageManager的resolveIntent()方法收集這個Intent對象的指向信息(中間會經(jīng)歷很多類,方法的調(diào)用)孵延。

  通過grantUriPermissionLocked()方法驗證用戶是否具有足夠的權(quán)限去調(diào)用目標(biāo)Activity吕漂;

  查詢ProcessRecord是否存在

  如果不存在,AMS會創(chuàng)建新的進(jìn)程來實例化目標(biāo)Activity尘应。

  接下來就說App進(jìn)程的創(chuàng)建過程了惶凝。

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

  調(diào)用startProcessLocked()方法創(chuàng)建新的進(jìn)程

  通過上面所說的Socket通道傳遞參數(shù)給Zygote進(jìn)程,Zygote進(jìn)程孵化自身犬钢,并調(diào)用ZygoteInit.main()方法來實例化ActivityThread對象苍鲜,并最終返回新進(jìn)程的pid。

  ActivityThread依次調(diào)用Looper.prepare()和Looper.loop()方法來開啟消息循環(huán)玷犹。

  這個時候進(jìn)程已經(jīng)創(chuàng)建完畢混滔,但是如何與應(yīng)用自身的Application聯(lián)系起來呢?

 Application的綁定

  調(diào)用ActivityThread中的bindApplication()方法發(fā)送一個BIND_APPLICATION的消息到消息隊列中.

  通過handleApplication()方法處理之前的綁定消息歹颓;

  調(diào)用makeApplication()方法來加載Application的class 到內(nèi)存中坯屿。

  大概的流程如下,如果需要做一些特殊的處理巍扛,還是需要自己深入到源碼中领跛,找到自己可以處理的點,進(jìn)行一些定制化處理撤奸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吠昭,一起剝皮案震驚了整個濱河市喊括,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怎诫,老刑警劉巖瘾晃,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異幻妓,居然都是意外死亡蹦误,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門肉津,熙熙樓的掌柜王于貴愁眉苦臉地迎上來强胰,“玉大人,你說我怎么就攤上這事妹沙∨佳螅” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵距糖,是天一觀的道長玄窝。 經(jīng)常有香客問我,道長悍引,這世上最難降的妖魔是什么恩脂? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮趣斤,結(jié)果婚禮上俩块,老公的妹妹穿的比我還像新娘。我一直安慰自己浓领,他們只是感情好玉凯,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著联贩,像睡著了一般漫仆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泪幌,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天歹啼,我揣著相機(jī)與錄音,去河邊找鬼座菠。 笑死狸眼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浴滴。 我是一名探鬼主播拓萌,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼升略!你這毒婦竟也來了微王?” 一聲冷哼從身側(cè)響起屡限,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炕倘,沒想到半個月后钧大,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡罩旋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年啊央,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涨醋。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓜饥,死狀恐怖浴骂,靈堂內(nèi)的尸體忽然破棺而出趣苏,到底是詐尸還是另有隱情拦键,我是刑警寧澤萄金,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站浙炼,受9級特大地震影響唯袄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宴偿,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望活翩。 院中可真熱鬧纱新,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掠廓,卻和暖如春换怖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟀瞧。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工沉颂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悦污。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓铸屉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親切端。 傳聞我的和親對象是個殘疾皇子抬探,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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

  • Zygote是什么?有什么作用? Android系統(tǒng)底層基于Linux Kernel, 當(dāng)Kernel啟動過程會創(chuàng)...
    Mr槑閱讀 2,806評論 4 18
  • 譯者注:原文分成兩個部分, 鏈接如下:http://multi-core-dump.blogspot.com/20...
    anly_jun閱讀 66,107評論 24 281
  • 深圳的天氣小压,最讓我喜歡的就是雨天线梗。平日里人多、車多怠益,到處嘈雜紛亂仪搔。只有雨天的時候,大家才各歸各窠蜻牢,世界由此安靜了許...
    木木的都寶閱讀 243評論 0 0
  • 我的老公 他不姓老烤咧,姓徐 徐里的人有個是多余 我曾喚他主人 我也喚過他愛人 他撞擊我的身體 卻毀壞我的靈魂 他希望...
    扭發(fā)條鳥決定的事閱讀 150評論 0 1
  • 浩瀚時空, 蒼茫宇宙抢呆, 每個人都是一個獨立的行為個體煮嫌, 有著自己遵循的方式和軌跡。 而我抱虐,愿意做一枚細(xì)小的星子昌阿,掩...
    白樂隨心閱讀 107評論 0 1