對于絕大多數(shù) Android 開發(fā)工程師來說烙常,掌握Android Framework 一直是一個(gè)不光要熟練而且必須要精通的技能。Framework這個(gè)應(yīng)用框架是Android開發(fā)中最基礎(chǔ)鹤盒,但同時(shí)也是最重要的蚕脏。Framework包含了Android IPC Binder機(jī)制侦副、Handler消息機(jī)制、Dalvik VM進(jìn)程系統(tǒng)蝗锥、AMS跃洛、WMS和Package Manager Service等等。而這些類別里又包含很多小類终议,有許多的分支汇竭,每一個(gè)小類里還有很多小細(xì)節(jié),這些都是Android開發(fā)工程師必須熟練掌握和精通的技能穴张。
如果做成一個(gè)框架圖的話细燎,就是下面這樣的:這只是一個(gè)簡單的框架圖,其實(shí)還有很多分支
很多大廠公司在面試的時(shí)候都會有很多的技術(shù)面試題皂甘,這是考察程序員必不可少的題目玻驻。
比方說:
1.Android中多進(jìn)程通信的方式有哪些?
2.進(jìn)程通信你用過哪些偿枕?原理是什么璧瞬?(字節(jié)跳動、小米)
3.描述下Binder機(jī)制原理渐夸?(東方頭條)
4.Binder線程池的工作過程是什么樣嗤锉?(東方頭條)
5.Handler怎么進(jìn)行線程通信,原理是什么墓塌?(東方頭條)
6.Handler如果沒有消息處理是阻塞的還是非阻塞的瘟忱?(字節(jié)跳動、小米)
7.handler.post(Runnable) runnable是如何執(zhí)行的苫幢?(字節(jié)跳動访诱、小米)
8.handler的Callback和handlemessage都存在,但callback返回true handleMessage還會執(zhí)行么韩肝?(字節(jié)跳動触菜、小米)
9.Handler的sendMessage和postDelay的區(qū)別?(字節(jié)跳動)
10.IdleHandler是什么哀峻?怎么使用涡相,能解決什么問題?
11.為什么Looper.loop不阻塞主線程谜诫?(騰訊)
12.Looper無限循環(huán)為啥沒有ANR(B站)
13.Looper如何在子線程中創(chuàng)建漾峡?(字節(jié)跳動攻旦、小米)
14.Looper喻旷、handler、線程間的關(guān)系牢屋。例如一個(gè)線程可以有幾個(gè)Looper可以對應(yīng)幾個(gè)Handler且预?(字節(jié)跳動槽袄、小米)
15.如何更新UI,為什么子線程不能更新UI锋谐?(美團(tuán))
16.ThreadLocal的原理遍尺,以及在Looper是如何應(yīng)用的?(字節(jié)跳動涮拗、小米)
17.Android 有哪些存儲數(shù)據(jù)的方式乾戏?
18.SharedPreference原理,commit與apply的區(qū)別是什么三热?使用時(shí)需要有哪些注意鼓择?(騰訊)
19.如何判斷一個(gè) APP 在前臺還是后臺?
20.如何做應(yīng)用本脱活呐能?
21.一張圖片100x100在內(nèi)存中的大小抑堡?(字節(jié)跳動)
22.Intent的原理摆出,作用,可以傳遞哪些類型的參數(shù)?
然后會再擴(kuò)展到和這些知識點(diǎn)相關(guān)的更深層次的知識點(diǎn)細(xì)節(jié)首妖,直到問的你答不上來為止偎漫,以此來探尋你的技術(shù)邊際,這樣就能更深入地了解你的技術(shù)能力悯搔。
Android Framework重要性
Android Framework 開發(fā)雖然比較偏底層骑丸,圈子窄,但是能掌握一些原理的東西妒貌,可以觸類旁通通危,往應(yīng)用層發(fā)展也可以,接下來我們看看Framework知識有多重要。舉幾個(gè)栗子芍锦,你或許就能清楚了苹粟。
像掉幀監(jiān)控,函數(shù)插裝逆害,慢函數(shù)檢測,ANR 監(jiān)控蚣驼,啟動監(jiān)控魄幕,都需要對 Framework 有比較深入的了解,才能知道怎么去做監(jiān)控颖杏,利用什么機(jī)制去監(jiān)控纯陨,函數(shù)插樁插到哪里,反射調(diào)用該反射哪個(gè)類哪個(gè)方法哪個(gè)屬性……
目前大公司的app開發(fā)都要基于模塊化、層次化翼抠、組件化咙轩、控件化的思路來設(shè)計(jì)架構(gòu),而這一切的基礎(chǔ)都建立在Android Framework系統(tǒng)框架底層原理實(shí)現(xiàn)之上阴颖。
Binder是Android系統(tǒng)中最重要的組成
Binder是什么呢活喊?請看下圖,圖是最能清楚明了的直觀表達(dá)的工具
Binde相比于其他通信方式的優(yōu)勢
Android 系統(tǒng)是基于 Linux 內(nèi)核的量愧,Linux 已經(jīng)提供了管道钾菊、消息隊(duì)列、共享內(nèi)存和 Socket 等 IPC 機(jī)制偎肃。那為什么 Android 還要提供 Binder 來實(shí)現(xiàn) IPC 呢结缚?主要是基于性能、穩(wěn)定性和安全性幾方面的原因软棺。
優(yōu)勢描述
性能:只需要一次數(shù)據(jù)拷貝红竭,性能上僅次于共享內(nèi)存
穩(wěn)定性:基于C/S架構(gòu),職責(zé)明確喘落,架構(gòu)清晰茵宪,因此穩(wěn)定性好
安全性:為每個(gè)App分配UID,進(jìn)程的UID是鑒別進(jìn)程身份的重要標(biāo)志
Android IPC Binder機(jī)制包含了:Linux預(yù)備知識、傳統(tǒng)的Linux中IPC通信原理瘦棋、Binder IPC通信原理和Binder Java層實(shí)現(xiàn)稀火,這些里面都各有好多小分支,小細(xì)節(jié)需要仔細(xì)的去學(xué)習(xí)掌握赌朋。
騰訊高級工程師Binder面試
1.為什么 Android 要采用 Binder 作為 IPC 機(jī)制凰狞?
2.Binder到底是什么?
3.Binder機(jī)制是如何跨進(jìn)程的沛慢?
4.一次Binder通信的基本流程是什么樣赡若?
5.為什么 Activity 間傳遞對象需要序列化?
6.四大組件底層的通信機(jī)制是怎樣的团甲?
7.AIDL 內(nèi)部的實(shí)現(xiàn)原理是什么逾冬?
這些都是關(guān)于Binder機(jī)制面試時(shí)會問到的點(diǎn)。
Handler消息機(jī)制
1.handler是什么躺苦?
Handler主要用于異步消息的處理: 有點(diǎn)類似輔助類身腻,封裝了消息投遞、消息處理等接口匹厘。當(dāng)發(fā)出一個(gè)消息之后嘀趟,首先進(jìn)入一個(gè)消息隊(duì)列,發(fā)送消息的函數(shù)即刻返回愈诚,而另外一個(gè)部分在消息隊(duì)列中逐一將消息取出她按,然后對消息進(jìn)行處理坡椒,也就是發(fā)送消息和接收消息不是同步的處理。 這種機(jī)制通常用來處理相對耗時(shí)比較長的操作尤溜。
2、為什么要用handler汗唱?
為什么要用handler宫莱?不用這種機(jī)制行不行?不行哩罪!android在設(shè)計(jì)的時(shí)候授霸,就封裝了一套消息的創(chuàng)建、傳遞际插、處理機(jī)制碘耳,如果不遵循這種機(jī)制,就沒有辦法更新UI信息框弛,就會拋出異常信息辛辨。
在android開發(fā)中,經(jīng)常會在子線程中進(jìn)行一些操作瑟枫,當(dāng)操作完畢后會通過handler發(fā)送一些數(shù)據(jù)給主線程斗搞,通知主線程做相應(yīng)的操作。探索其背后的原理:子線程handler主線程其實(shí)構(gòu)成了線程模型中的經(jīng)典問題生產(chǎn)者-消費(fèi)者模型慷妙。生產(chǎn)者-消費(fèi)者模型:生產(chǎn)者和消費(fèi)者在同一時(shí)間段內(nèi)共用同一個(gè)存儲空間僻焚,生產(chǎn)者往存儲空間中添加數(shù)據(jù),消費(fèi)者從存儲空間中取走數(shù)據(jù)膝擂。
AMS
Android系統(tǒng)非常龐大虑啤、錯(cuò)綜復(fù)雜,其底層是采用Linux作為基底架馋,上層采用包含虛擬機(jī)的Java層以及Native層狞山,通過系統(tǒng)調(diào)用(Syscall)連通系統(tǒng)的內(nèi)核空間與用戶空間。用戶空間主要采用C++和Java代碼叉寂,通過JNI技術(shù)打通用戶空間的Java層和Native層
AMS面試題解析
- ActivityManagerService是什么铣墨?什么時(shí)候初始化的?有什么作用办绝?
- ActivityThread是什么?ApplicationThread是什么?他們的區(qū)別
- Instrumentation是什么伊约?和ActivityThread是什么關(guān)系?
- ActivityManagerService和zygote進(jìn)程通信是如何實(shí)現(xiàn)的?
- ActivityRecord孕蝉、TaskRecord屡律、ActivityStack,ActivityStackSupervisor降淮,ProcessRecord
深入理解WMS
WMS是android中的一個(gè)重要的系統(tǒng)服務(wù)超埋,用于窗口管理搏讶。從其內(nèi)部實(shí)現(xiàn)來看,包含以下的一些功能
窗口的添加與刪除
啟動窗口
窗口動畫
窗口大小
窗口層級
Framework為什么重要霍殴,在上文的一系列敘述中媒惕,我想大家都會有所體會。它的技術(shù)點(diǎn)范圍實(shí)在是太多了来庭,我今天也只是挑一些非常重要的點(diǎn)來分享一下妒蔚。僅僅靠 一篇文章是不可能敘述全面的,還得靠大家自己去系統(tǒng)的學(xué)習(xí)月弛,但我會一直發(fā)文分享肴盏,希望對各位有所幫助。如果文中有錯(cuò)誤的地方帽衙,望包含菜皂,請大家?guī)兔χ刚?/li>