Framework應(yīng)用框架為什么重要呢您旁?

對于絕大多數(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面試題解析

  1. ActivityManagerService是什么铣墨?什么時(shí)候初始化的?有什么作用办绝?
  2. ActivityThread是什么?ApplicationThread是什么?他們的區(qū)別
  3. Instrumentation是什么伊约?和ActivityThread是什么關(guān)系?
  4. ActivityManagerService和zygote進(jìn)程通信是如何實(shí)現(xiàn)的?
  5. 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>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厉萝,隨后出現(xiàn)的幾起案子恍飘,更是在濱河造成了極大的恐慌,老刑警劉巖谴垫,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件常侣,死亡現(xiàn)場離奇詭異,居然都是意外死亡弹渔,警方通過查閱死者的電腦和手機(jī)胳施,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肢专,“玉大人舞肆,你說我怎么就攤上這事〔┱龋” “怎么了椿胯?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剃根。 經(jīng)常有香客問我哩盲,道長,這世上最難降的妖魔是什么狈醉? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任廉油,我火速辦了婚禮,結(jié)果婚禮上苗傅,老公的妹妹穿的比我還像新娘抒线。我一直安慰自己,他們只是感情好渣慕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布嘶炭。 她就那樣靜靜地躺著抱慌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眨猎。 梳的紋絲不亂的頭發(fā)上抑进,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音睡陪,去河邊找鬼寺渗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宝穗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播码秉,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逮矛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了转砖?” 一聲冷哼從身側(cè)響起须鼎,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎府蔗,沒想到半個(gè)月后晋控,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姓赤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年赡译,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片不铆。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝌焚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出誓斥,到底是詐尸還是另有隱情只洒,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布劳坑,位于F島的核電站毕谴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏距芬。R本人自食惡果不足惜涝开,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望框仔。 院中可真熱鬧忠寻,春花似錦、人聲如沸存和。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纵朋,卻和暖如春柿顶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背操软。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工嘁锯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聂薪。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓家乘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藏澳。 傳聞我的和親對象是個(gè)殘疾皇子仁锯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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