Android App安裝以及啟動(dòng)流程

App 安裝

Android App的安裝可以分為有界面的安裝和無(wú)界面的安裝旅敷。

有界面的安裝其實(shí)就是調(diào)用系統(tǒng)App(PackageInstaller)去安裝apk嚷缭,打開(kāi)安裝apk應(yīng)用之后蛇捌,點(diǎn)擊安裝按鈕執(zhí)行startInstall方法,然后就進(jìn)入安裝中界面開(kāi)始安裝衙伶,安裝成功或者失敗都會(huì)有對(duì)應(yīng)的回調(diào)栋猖。內(nèi)部其實(shí)也是使用PackageManager的installExistingPackage方法,通過(guò)binder機(jī)制像啼,調(diào)用到PackageManagerService的installExistingPackage方法俘闯,最終調(diào)用到installExistingPackageAsUser方法安裝,而安裝的核心原理其實(shí)就是將apk文件拷貝到系統(tǒng)可識(shí)別的重要的文件目錄

  • /data/data/packageName/xxx.apk
  • /data/data/packageName/(db,cache等)
  • /data/dalvik-cache/(profiles,x86)

無(wú)界面安裝是調(diào)用adb命令忽冻,執(zhí)行到一個(gè)c寫的commandline腳本真朗,調(diào)用install_app方法,然后再調(diào)用pm_command僧诚,然后執(zhí)行到pm腳本遮婶,執(zhí)行run方法,調(diào)用runinstall湖笨,然后調(diào)用installPackageAsUser通過(guò)AMS執(zhí)行安裝旗扑。

App應(yīng)用啟動(dòng)流程

說(shuō)到App的啟動(dòng),就需要從開(kāi)機(jī)開(kāi)始說(shuō)起慈省,Android開(kāi)機(jī)會(huì)先把所有應(yīng)用安裝一遍就是把a(bǔ)pk拷貝到對(duì)應(yīng)的目錄(這也是Android開(kāi)機(jī)慢的原因)臀防。

整個(gè)流程如下:

  • 激活linux內(nèi)核
  • linux內(nèi)核激活引導(dǎo)進(jìn)程
  • 引導(dǎo)進(jìn)程經(jīng)過(guò)一系列操作激活init進(jìn)程
  • init進(jìn)程創(chuàng)建zygote進(jìn)程
  • zygote進(jìn)程孵化SystemService進(jìn)程,SystemService會(huì)先創(chuàng)建好所有系統(tǒng)服務(wù)
  • 系統(tǒng)服務(wù)啟動(dòng)完成之后辫呻,SystenService會(huì)激活Launch進(jìn)程
  • Launch進(jìn)程就會(huì)先請(qǐng)求PMS清钥,獲取到安裝的所有apk的信息并展示
  • 這時(shí)候就可以點(diǎn)擊某個(gè)應(yīng)用來(lái)啟動(dòng)
  • 啟動(dòng)就會(huì)調(diào)用startActivity
  • 然后使用binder機(jī)制調(diào)用AMS,從應(yīng)用進(jìn)程進(jìn)入系統(tǒng)進(jìn)程
  • 如果該Activity的應(yīng)用沒(méi)有被創(chuàng)建放闺,就會(huì)通過(guò)socket通知zygote進(jìn)程孵化一個(gè)新的進(jìn)程作為該應(yīng)用的進(jìn)程
  • 然后再通過(guò)socket把新創(chuàng)建的進(jìn)程傳遞給AMS祟昭,這時(shí)候應(yīng)用進(jìn)程存在了,就會(huì)對(duì)該進(jìn)程的權(quán)限校驗(yàn)怖侦,信息的檢查等
  • 接著調(diào)用ApplicationThread也是通過(guò)binder機(jī)制調(diào)用到ActivityThread篡悟,從系統(tǒng)進(jìn)程回到應(yīng)用進(jìn)程
  • 最終創(chuàng)建出Activity并執(zhí)行其onCreate方法谜叹,啟動(dòng)完成

其實(shí)App的啟動(dòng),除了剛開(kāi)機(jī)是不一樣之外搬葬,正常時(shí)候基本與Activity的啟動(dòng)非常接近荷腊。

總結(jié)

  • apk的安裝其實(shí)是文件拷貝的過(guò)程
  • 桌面Launcher其實(shí)也是一個(gè)應(yīng)用程序,啟動(dòng)一個(gè)app急凰,大致流程與Activity的啟動(dòng)非常相似女仰,無(wú)非會(huì)多一個(gè)孵化應(yīng)用進(jìn)程的過(guò)程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抡锈,隨后出現(xiàn)的幾起案子疾忍,更是在濱河造成了極大的恐慌,老刑警劉巖床三,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件一罩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡撇簿,警方通過(guò)查閱死者的電腦和手機(jī)聂渊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)四瘫,“玉大人汉嗽,你說(shuō)我怎么就攤上這事≌颐郏” “怎么了诊胞?”我有些...
    開(kāi)封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锹杈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)迈着,這世上最難降的妖魔是什么竭望? 我笑而不...
    開(kāi)封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮裕菠,結(jié)果婚禮上咬清,老公的妹妹穿的比我還像新娘。我一直安慰自己奴潘,他們只是感情好旧烧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著画髓,像睡著了一般掘剪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奈虾,一...
    開(kāi)封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天夺谁,我揣著相機(jī)與錄音廉赔,去河邊找鬼。 笑死匾鸥,一個(gè)胖子當(dāng)著我的面吹牛蜡塌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勿负,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼馏艾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了奴愉?” 一聲冷哼從身側(cè)響起琅摩,我...
    開(kāi)封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躁劣,沒(méi)想到半個(gè)月后迫吐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账忘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年志膀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳖擒。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溉浙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒋荚,到底是詐尸還是另有隱情戳稽,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布期升,位于F島的核電站惊奇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏播赁。R本人自食惡果不足惜颂郎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望容为。 院中可真熱鬧乓序,春花似錦、人聲如沸坎背。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)得滤。三九已至陨献,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間懂更,已是汗流浹背湿故。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工阿趁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坛猪。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓脖阵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親墅茉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子命黔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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