近十幾年來,隨著以Android系統(tǒng)為代表的智能手機普及與發(fā)展,互聯(lián)網行業(yè)早已進入“移動”的時代。但是現(xiàn)如今的“風口”已經從移動轉向,整個移動互聯(lián)網行業(yè)正處于增量下降、存量廝殺的階段。面對技術更新迭代加速,前景不太明朗,很多開發(fā)者都感到了有些焦慮和迷茫。并且,在如此的大環(huán)境下,整個行業(yè)頭部企業(yè),越來越重視產品的體驗與成本,對中高級的開發(fā)者的能力要求也越來越高。
現(xiàn)在大廠面試時,我們經常會被問到這些問題:
- 為什么Zygote通信fork進程,使用的是socket,而不是Android的Binder?
- 為什么是從zygote進程fork App,而不是其他進程?
- Binder在做數(shù)據(jù)傳輸過程中,最大的數(shù)據(jù)量限制是多少?
- 打開一個Activity的過程中經歷過幾次跨進程調用?
- ANR彈框的原理是什么?
- ……
每當這時候,內心真是一萬只槽泥馬奔騰而過……
大部分Android開發(fā)者一遇到這種面試題就直接懵逼了,不少人不是沒有看過相關的解答,但也都只是淺嘗輒止,沒有深入掌握其中原理,面試的時候自然會被問個措手不及。
下面這張圖想必大家都看過,google官方提供過一張經典的平臺架構圖,從下往上依次分為:linux內核、硬件抽象層、Native層、JAVA Framework層、App層,每一層都包含大量的子模塊或子系統(tǒng)。
可以看到具體app的下面就是Framework層的支撐。所以掌握Framework層非常有助于我們開發(fā)出一個性能良好的App,另外在大廠的面試過程中,F(xiàn)ramework也是高階面試時必問的問題。
Framework 知識廣泛應用在Android各個領域中,重要性顯而易見。成為一名Android Framework高手,也是目前招聘過程中非常稀缺的人才,可以成為你的敲門磚。
Framework始終穿插在 App 整個研發(fā)生命周期中,不管是從 0 到 1 的建立階段,還是從 1 到 N 打磨階段,都離不開Framework。
在所有的Framework知識中,要數(shù)最重要的還是AMS,主打和Activity,Service,ContentProvider,Broadcast等交互:
看一下上圖,Activity啟動,涉及到ActivityThread,AMS,H類,上述過程還涉及到多次跨進程調用,涉及到各種binder的知識。
搞清楚這些:我們就可以去研究各種黑科技,例如在做插件化的時候,你需要占坑Activity等,hook代碼等都是在和AMS斗智斗勇;在做性能優(yōu)化的時候,你也要了解AMS是如何調度Activity的,消息隊列是如何運轉的。
但AMS本身比較復雜、難以理解,許多工作多年的Android開發(fā)者也很難弄清AMS的作用。于是,系統(tǒng)的整體運行過程就成為了大廠面試的重災區(qū)。
比如下面這張Android啟動流程圖,不少人都看過,但少有人沉下心去仔仔細細的研究過。
作為過來人,我發(fā)現(xiàn)很多學習者和實踐者都在 Android Framework上面臨著很多的困擾,比如:
- 工作場景中遇到難題,往往只能靠盲猜和感覺,用臨時性的補救措施去掩蓋,看似解決了問題,但下次同樣的問題又會發(fā)作,原因則是缺乏方法論、思路的指引以及工具支持;
- 能力修煉中,缺乏互聯(lián)網項目這一實踐環(huán)境,對Framework只能通過理論知識進行想象,無法認識其在工作實戰(zhàn)中的真實面目和實操過程;
- 職場晉升中,只管功能開發(fā),不了解底層原理,缺少深入地思考與總結,無法完成復雜系統(tǒng)設計這類高階工作,難以在工作中大展拳腳,而有挑戰(zhàn)的工作往往留給有準備的人。
總之,一旦遇到問題,很少人能夠由點及面逆向分析,最終找到瓶頸點和最優(yōu)解決方案,而Framework是Android開發(fā)的深水區(qū),也是衡量一個Android程序員能力高低的標準。
如果你還沒有掌握Framework,現(xiàn)在想要在最短的時間里吃透它,那么必須要跟著正確的學習路線一步步深挖學習!