Android Framework學(xué)習(xí)計(jì)劃

原文轉(zhuǎn)自 https://zhuanlan.zhihu.com/p/429345018

Android Framework重要性

Android Framework 開發(fā)雖然比較偏底層哺眯,圈子窄盾鳞,但是能掌握一些原理的東西楣责,可以觸類旁通肠仪,往應(yīng)用層發(fā)展也可以,接下來(lái)我們看看Framework知識(shí)有多重要旺上。舉幾個(gè)栗子粪糙,你或許就能清楚了。

像掉幀監(jiān)控鸯两,函數(shù)插裝闷旧,慢函數(shù)檢測(cè),ANR 監(jiān)控钧唐,啟動(dòng)監(jiān)控忙灼,都需要對(duì) Framework 有比較深入的了解,才能知道怎么去做監(jiān)控,利用什么機(jī)制去監(jiān)控该园,函數(shù)插樁插到哪里酸舍,反射調(diào)用該反射哪個(gè)類哪個(gè)方法哪個(gè)屬性……

目前大公司的app開發(fā)都要基于模塊化、層次化里初、組件化啃勉、控件化的思路來(lái)設(shè)計(jì)架構(gòu),而這一切的基礎(chǔ)都建立在Android Framework系統(tǒng)框架底層原理實(shí)現(xiàn)之上双妨。

如何學(xué)習(xí)Android Framework

1.系統(tǒng)啟動(dòng)流程分析

Android是基于Linux的開源操作系統(tǒng)淮阐,下圖所示為 Android 平臺(tái)的主要組件。


image.png

Android 平臺(tái)的基礎(chǔ)是 Linux 內(nèi)核刁品。例如泣特,Android Runtime (ART) 依靠 Linux 內(nèi)核來(lái)執(zhí)行底層功能,例如線程和低層內(nèi)存管理挑随。使用 Linux 內(nèi)核可讓 Android 利用主要安全功能状您,并且允許設(shè)備制造商為著名的內(nèi)核開發(fā)硬件驅(qū)動(dòng)程序。

此外還需要學(xué)習(xí)和掌握int進(jìn)程镀裤。
init進(jìn)程是Android系統(tǒng)中及其重要的第一個(gè)進(jìn)程竞阐,init進(jìn)程通常會(huì)做到以下幾點(diǎn)。

創(chuàng)建和掛載啟動(dòng)所需要的文件目錄
初始化和啟動(dòng)屬性服務(wù)
解析init.rc配置文件并啟動(dòng)Zygote進(jìn)程
init.rc是一個(gè)非常重要的配置文件暑劝,它是由Android初始化語(yǔ)言(Android Init Language)編寫的腳本骆莹,這里也是需要重點(diǎn)掌握和學(xué)習(xí)的。
最后不得不提zgyote了担猛,作為Android中的第一個(gè)art虛擬機(jī)幕垦,他通過(guò)socket的方式與其他進(jìn)程進(jìn)行通信。這里的“其他進(jìn)程”其實(shí)主要是系統(tǒng)進(jìn)程——SystemServer傅联。因此重要性不言而喻先改。

2.Binder解析

Binder機(jī)制作為進(jìn)程間通信的一種手段,基本上貫穿了andorid框架層的全部蒸走。所以首先必須要搞懂的Android Binder的基本通信機(jī)制仇奶。

首先我們要宏觀認(rèn)識(shí)Binder,從binder框架比驻、binder涉及到的類该溯、binder驅(qū)動(dòng)整體層面去重新認(rèn)識(shí)它。

image.png

接下來(lái)再?gòu)腷inder的jni方法注冊(cè)别惦、binder驅(qū)動(dòng)狈茉、數(shù)據(jù)結(jié)構(gòu)、啟動(dòng)service_manager掸掸、獲取service_manager氯庆、addService流程等逐級(jí)進(jìn)行學(xué)習(xí)蹭秋。

3.深入解析Handler

Message 源碼分析,再到MessageQueue 的源碼分析堤撵,Looper 的源碼分析仁讨,handler 的源碼分析,Handler 機(jī)制實(shí)現(xiàn)原理粒督,既是面試撑愀停考,又是工作必備技能屠橄。

image.png

4.深入解析AMS

Android系統(tǒng)非常龐大、錯(cuò)綜復(fù)雜闰挡,其底層是采用Linux作為基底锐墙,上層采用包含虛擬機(jī)的Java層以及Native層, 通過(guò)系統(tǒng)調(diào)用(Syscall)連通系統(tǒng)的內(nèi)核空間與用戶空間长酗。用戶空間主要采用C++和Java代碼溪北,通過(guò)JNI技術(shù)打通用戶空 間的Java層和Native層(C++/C),從而融為一體夺脾。
Google官方提供了一張經(jīng)典的四層架構(gòu)圖之拨,從下往上依次分為L(zhǎng)inux內(nèi)核、系統(tǒng)庫(kù)和Android運(yùn)行時(shí)環(huán)境咧叭、框架 層以及應(yīng)用層這4層架構(gòu)蚀乔,其中每一層都包含大量的子模塊或子系統(tǒng)。

image.png

5.深入解析 WindowManagerService

簡(jiǎn)稱Wms菲茬,WindowManagerService管理窗口的創(chuàng)建吉挣、更新和刪除,顯示順序等婉弹,是WindowManager這個(gè)管理接品的真正的實(shí)現(xiàn)類睬魂。它運(yùn)行在System_server進(jìn)程,作為服務(wù)端镀赌,客戶端(應(yīng)用程序)通過(guò)IPC調(diào)用和它進(jìn)行交互氯哮。

6.PackagerManagerService

image.png

PackageManagerService(簡(jiǎn)稱 PKMS),是 Android 系統(tǒng)中核心服務(wù)之一商佛,負(fù)責(zé)應(yīng)用程序的安裝喉钢,卸載,信息查詢威彰,等工作出牧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市歇盼,隨后出現(xiàn)的幾起案子舔痕,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伯复,死亡現(xiàn)場(chǎng)離奇詭異慨代,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)啸如,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門侍匙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人叮雳,你說(shuō)我怎么就攤上這事想暗。” “怎么了帘不?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵说莫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我寞焙,道長(zhǎng)储狭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任捣郊,我火速辦了婚禮辽狈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呛牲。我一直安慰自己刮萌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布侈净。 她就那樣靜靜地躺著尊勿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜侦。 梳的紋絲不亂的頭發(fā)上元扔,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音旋膳,去河邊找鬼澎语。 笑死,一個(gè)胖子當(dāng)著我的面吹牛验懊,可吹牛的內(nèi)容都是我干的擅羞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼义图,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼减俏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起碱工,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娃承,失蹤者是張志新(化名)和其女友劉穎奏夫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體历筝,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酗昼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梳猪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麻削。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖春弥,靈堂內(nèi)的尸體忽然破棺而出呛哟,到底是詐尸還是另有隱情,我是刑警寧澤惕稻,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布竖共,位于F島的核電站,受9級(jí)特大地震影響俺祠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜借帘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一蜘渣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肺然,春花似錦蔫缸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至街望,卻和暖如春校翔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灾前。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工防症, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哎甲。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓蔫敲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親炭玫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奈嘿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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