安卓 Framework原始碼哪些類有必要進行深入學習?

閱讀前請點選右上角“關注”,每天免費獲取Android知識解析及面試解答。Android架構解析,只做職場乾貨,完全免費分享!

前段時間收到了一個網友詢問我:

兩年 Android 應用開發,沒有 Android Framework 開發經驗,有沒有機會找一份接觸到 Android Framework 開發的工作。Android Framework原始碼如何深入學習研究?

可能有很多網友會認為:Framework 就業方向窄,而且編譯很費時。不值得深入學習研究。

相信所有人開始學習android開發的時候都是從以下這張圖開始的,framework位於hal、系統庫之上,位於app之下。

安卓 Framework原始碼哪些類有必要進行深入學習?

Framework同下層打交到的方式就是jni,同上層打交到的方式就是抽象出各種java介面,在開發app的時候,import的各種android。* 就是各位在查文件時候的東東了。

像網友這樣從app而來想要學習framework的肯定對JNI不那麼熟悉吧,沒關係,Google的命名方式可以讓你忽略這部分實現,好好看java程式碼就夠了。

從哪裡開始呢?上面那張結構圖裡面的各種Manager背後都是系統服務,Framework包含各種系統服務,所以“得服務者、得Framework”(我瞎說的,哈哈哈),這裡可以簡單介紹一下這些服務的結構。

Framework裡的服務按照“SystemService。java”裡分的話,分為可以Binder的服務、LocalService兩類,如下圖所示:

安卓 Framework原始碼哪些類有必要進行深入學習?

每類服務都會在Systemserver。java裡啟動自己,然後其他服務就可以呼叫了。而且大部分服務都有一個Manager(就是結構圖裡的各種

Manager),這點在搜程式碼的時候會看到各種

ServiceManager。java的類。這裡Managers很大一部分都是開放出來的呼叫介面。

來看看SystemServer。java這個檔案的一些函式,如下圖:

安卓 Framework原始碼哪些類有必要進行深入學習?

在這裡啟動了各種型別的服務,下面這些都很熟悉吧?

安卓 Framework原始碼哪些類有必要進行深入學習?

這樣是不是找到了各個Service的啟動位置了。就是在這裡,各個服務完成初始化,被呼叫了建構函式,以及最初被呼叫的那幾個函式找到了。程式入口找到了,是不是可以解決一半問題了呢?

以上這些都是很長的檔案,看起來頭暈有木有啊。這裡推薦一個Framework裡最簡單的Service——LightService,一共就以下幾個檔案。

。/services/core/java/com/android/server/lights/LightsManager。java

。/services/core/java/com/android/server/lights/Light。java

。/services/core/java/com/android/server/lights/LightsService。java

這個就是控制一閃一閃LED的控制介面了。每個程式碼不超過百行,但是也代表了一共典型的Service在Framework裡面是種怎樣的存在吧。

至於你的那些問題,就是要跟著函式呼叫慢慢走,慢慢看吧。

學習程式最需要會的一點就是–抽象。不管是寫還是看。

除此之外還需深入解析:WMS、AMS、PMS、NMS、InputSystem等相關實現

Android事件分發機制:幫助你在寫複雜自定義控制元件時協助解決事件衝突。

View的測量佈局和繪製機制,熟練掌握畫布Canvas API、Android座標系、觸控事件等,熟悉繪圖技巧、熟悉滑動原理。

Android動畫:熟練掌握動畫Tween Animation、Frame Animation、Property Animation,有助於你寫出互動體驗好的自定義控制元件。

Android多執行緒通訊原理、執行緒控制、執行緒池、掌握Handler、Looper、ThreadLocal、Thread、Runnable、AsyncTask、HandlerThread、IntentService、Future、FutureTask、Callable等,掌握Java併發程式設計。

5。掌握Android程序間通訊原理,試著分析Binder工作機制。

6。瞭解Activity啟動過程,可以從startActivity()一步一步分析原始碼,過程不必拘泥於實現細節,掌握大致流程即可。

7。瞭解四大元件工作過程,和上面一個一樣,從原始碼分析,一步一步來看WMS、AMS、PMS、NMS等如何透過binder完成程序間通訊。

8。瞭解window建立過程、掌握window新增刪除更新機制。

9。理解Context;如Application對應的Context、Activity對應的Context、Service對應的Context以及Context之間的關係

10。掌握Android資源載入機制用得比較多的Java輔助知識點:

併發程式設計:執行緒池、ThreadLocal、Future、FutureTask、Callable等

2。Java動態代理(cglib/jdk)、反射

3。Java IO、集合類

4。序列化

5。註解

6。IOC和AOP

7。類載入器

安卓 Framework原始碼哪些類有必要進行深入學習?

Android Framework精編核心解析

完整全套的Framework精編核心解析已經被整理成了PDF文件,麻煩關注+轉發+私信【學習】即可獲取資料免費領取方式!