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






