為什麼要學Android Framework
别的不說,你隻要去 Github上看一下騰訊Matrix的源碼,就知道Framework 的知識有多重要了。像掉幀監控,函數插裝,慢函數檢測,ANR 監控,啟動監控,都需要對 Framework 有比較深入的了解,才能知道怎麼去做監控,利用什麼機制去監控,函數插樁插到哪裡,反射調用該反射哪個類哪個方法哪個屬性……
另外 Framework 作為 Android 架構層,為 App 提供了衆多 API 去調用 ,但是很多機制都是 Framework 包裝好了給 App 來用的,如果不知道這些機制的原理,那麼很難去在這基礎上做優化。
舉個例子,如果你了解 Android App 的啟動機制,優化啟動速度的時候會更得心應手:定制什麼樣的 StartingWindow;什麼時候可以拿到圖檔的寬高;DelayLoad 怎麼做才會更合适;Service 什麼時候啟動可以不影響啟動速度;Activity onResume 回調的時候真的可見了麼?Redex 為什麼會加快應用啟動速度?
再比如我們經常說的 Handler,MessageQueue,Looper。看源碼你就可以更好的了解那些概念:ThreadLocal 做什麼的;Thread 和 Handler 的關系;為什麼不能在子線程更新 UI?
還有很多栗子,這裡就不一一論述學習Android Framework的重要性了。
如何學習Android Framework
既然Framework這麼重要,那我們該如何學習呢?
關于如何學習Android Framework開發知識,最近騰訊大佬最新釋出了Android framework進階開發筆記,部分知識章節釋出到了在GitHub上竟然已标星18K,今天就拿出來分享給大家。
本筆記主要講解了Framework的主要子產品:
第一章: 深入解析Binder
Binder機制作為程序間通信的一種手段,基本上貫穿了andorid架構層的全部。是以首先必須要搞懂的Android Binder的基本通信機制。
本章知識點
- Binder 系列—開篇
- Binder Driver 初探
- Binder Driver 再探
- Binder 啟動 ServiceManager
- 擷取 ServiceManager
- 注冊服務(addService)
- 擷取服務(getService)
- Framework 層分析
- 如何使用 Binder
- 如何使用 AIDL
- Binder 總結
- Binder 面試題全解析
第二章: 深入解析Handler
相信大家都有這樣的感受:網上分析 Handler 機制原理的文章那麼多, 為啥還要畫蛇添足整理這份筆記呢?不是說前人們寫的文章不好,我就是覺得他們寫的不細, 有些點不講清楚,邏輯很難通順的,每次我學個什麼東西時遇到這種情況都賊難受。
本章先宏觀理論分析與 Message 源碼分析,再到MessageQueue 的源碼分析,Looper 的源碼分析,handler 的源碼分析,Handler 機制實作原理總結。最後還整理Handler 所有面試題大全解析。
文中全部資料可點此處直達免費領取。
Handler這章内容很長,但思路是循序漸進的,如果你能堅持讀完我相信肯定不會讓你失望。
第三章: Dalvik VM 程序系統
Andorid系統啟動、init 程序、Zygote、SystemServer啟動流程、 應用程式的建立使用,Activity的建立、銷毀 Handler和Looper。
第四章深入解析 WMS
視窗管理架構 系統動畫架構 View的工作原理。
第五塊 PackagerManagerService
包管理服務。 資源管理相關類
最後分享Framework的學習4個技巧
- 看不懂的多讀。 沒有人能一學就會,特别是對于初學者,你剛看系統源碼,肯定一頭霧水。萬事開頭難,在你覺得艱深晦澀的時候,你就當在背課文。Android Framework的代碼是遵循一定規範的,你在背了一篇課文之後,再去讀别的課文,讀到一半的時候就算你看不懂,很有可能你就會知道下面要講什麼了,雖然下面要講的你也不懂。背熟了之後,你就可以想每一句是什麼意思了。而這裡面的「段落」、「句子」不就是普通的代碼嗎?就這樣,一步一步串聯起來,聚沙成塔,積少成多,就水到渠成了。「書讀百遍,其義自現」講的就是這道理。如果你真的想要學習Framework,一定要多讀,硬着頭皮讀,不要放棄。
-
不重要的少讀。 看不懂的很容易知道是什麼,那麼怎麼知道哪些代碼是不重要的呢?這裡有兩層意思:
其一: 強調的是大局觀,在初學習一個子產品的時候,你需要先把握整體,再了解局部。這個場景下,所有的細節都是不重要的。
其二: 那些真正不重要的邏輯。你剛學習的時候肯定沒有辦法知道哪些是影響不大的邏輯,是以你可以跟着上面整理的筆記去學習,讓前人帶路。如果跟着它們的腳步走通了這條路,那你就自己獨立走一遍,這時候你肯定會走丢,然後你跟蹤、嘗試,接着到達終點。這時候你自然就知道,哪些重要,哪些不重要。
- 邊讀邊思考。 學而不思則罔,思而不學則怠。帶着問題去閱讀源碼,這裡是什麼意思?為什麼需要這麼做?這樣的實作是優雅還是俗套?有沒有更好的實作辦法?如果我來寫,我會怎麼寫?諸如此類,有了思考就有了自己的了解。
- 記得做筆記。 做筆記的重要性在于,它可以記下你自己在某個階段自己的了解,當你更進一步的時候回頭再看當初的了解,想想哪裡是對的,哪裡又有問題,這是一個相當有意思的過程。我想每一個人在看自己之前寫的代碼,都會有在某個地方覺得自己是沙比的時候。根據你學習過程簡單總結一下,這樣你的元認知能力就得到了提升。
關于Android Framework 的知識,我就在這隻分享這麼多了,後續還會有新的内容更新。文章的那個《Android Framework精編核心解析》學習文檔,我已整理在 CodeChina 上了。大家如果想要參考學習可以直接去我 CodeChina:https://codechina.csdn.net/u012165769/Android-T3通路查閱。裡面還有更多的Android 相關的學習筆記和文檔。