原文轉(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)的主要組件。
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í)它。
接下來(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)原理粒督,既是面試撑愀停考,又是工作必備技能屠橄。
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)。
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
PackageManagerService(簡(jiǎn)稱 PKMS),是 Android 系統(tǒng)中核心服務(wù)之一商佛,負(fù)責(zé)應(yīng)用程序的安裝喉钢,卸載,信息查詢威彰,等工作出牧。