近十幾年來,隨著以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知識中,要數最重要的還是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,現在想要在最短的時間裡吃透它,那麼必須要跟著正確的學習路線學習!
這裡給大家推薦《Framework知識點筆記》,有需要的朋友們可以直接私信我【進階】即可免費領取!
如果需要這份《Framework知識點筆記》,直接私信我【進階】即可免費領取!