做過三年framework,自身總結了一套學習方法,大致如下三點,勤加練習,一般性模塊可以看的非常快,
1、高度抽象,構建框架
2、重要函式,深究細節
3、善用工具,及時總結
Android原始碼非常龐大,但設計很精妙,縱向分層,橫向模塊化,使得整個原始碼更易更新和維護,在手機廠商做framework的更傾向于說自己是做Android系統的,維護的模塊主要包括ActivityManagerService、WindowManagerService、PackageManagerService、PowerManagerService、SurfaceFlinger、通信模塊、多媒體模塊等,Android系統良好的模塊化設計使得各個模塊負責人只需搞懂自己的模塊就可以勝任作業,但是搞定自己的模塊并不那么容易,對于新人一般要大概做半年才能掌握其精要,有的做了一年發現還有很多點沒有掌握,這也是很常見的,
首先必須了解一些背景知識,1.Android系統采用C/S架構;2.絕大部分IPC通信采用Binder通信;3.核心Service大多運行在System_server行程;4.核心Service代碼大部分都在frameworks/base/services目錄下;5.別一上來就看Binder!!!6.別一開始看原始碼就鉆牛角尖!!!
以下便是我的學習方法,不保證適合其他人,供參考,
1、首先,大概了解下該Service是干什么的,我會搜一些好的分析文章收藏起來,大概瀏覽下該Service為上層應用提供了什么功能?(這些文章并不會去挨個讀,這跟絕大多數人習慣不一樣,他們一般是一邊看分析文章一邊看原始碼),在原始碼里找到原始碼檔案,大概看下核心幾個檔案開頭的注釋,注釋一般會說的非常清楚這個是干嘛的,(我用source insight看原始碼)
2、然后,可以嘗試寫一個小demo,方便除錯Service內部方法或抓取系統日志來追蹤代碼流程,運行在system_server行程中的Java代碼均可使用Android studio除錯,當然必須是自己編譯的image才行,MTK平臺手機部分service是可以通過adb shell dumpsys XXX log XX來開啟對應service的log
3、接著,從核心API呼叫入手,一步一步分析原始碼,理出一個從應用端到Service端,最后回到應用端的函式呼叫鏈,這條呼叫鏈必定很長很長,有非常多的分支,還會出現非常多的類,這個時候就要抓住主線不放,細枝末節可以不管,借助UML工具了,一般畫兩個圖就夠了,一個是類圖,一個是時序圖,畫圖要精簡,只畫重要的主線分支時序圖和主要的類關系,這個步驟最難的是理出主線分支呼叫,切記鉆牛角尖偏離目標任務,只需理出一個client–>service–>client的框架即可,將時序圖畫出來后,整個框架便構建出來了,(我用starUML工具)
4、然后,在上面的框架中必定有幾個非常關鍵的函式,把它搞定,搞定方法就是一行一行讀代碼,讀懂每一行并不容易,需要聯系背景關系進行理解,從重要函式中要理清service是如何管理target的,比如AMS是使用Stack和Task來管理Activity的,使用兩個佇列來處理廣播,扮演連接者將client和目標ContentProvider建立起連接等,這個程序也是最花時間的,因為你需要從原始碼里面盡可能地還原作者的設計思想,還原的越徹底,理解的越透徹,一般我是一邊理解一邊用筆記記錄自己的理解,(我用有道云筆記)
5、最后,整理出一篇筆記,方便以后回顧,在前面兩步做完,圖有了,分析也有了,稍微整理下便成了一篇檔案,一般情況下是這樣的,今天你理解的差不多了,一個月后你估計只記得大概個輪廓,細節全忘了,兩個月后估計連輪廓都忘了,相信我,這時最管用的就是那兩個圖了,一看就能讓你想起80%,所以我非常喜歡畫類圖和時序圖,
而下面便是我自己整理出來的一份筆記資料,
筆記
第一章 深入決議Binder
第一節Binder系列—開篇
第二節Binder Driver初探
第三節Binder Driver再探
第四節Binder啟動ServiceManager
第五節獲取ServiceManager
第六節注冊服務(addService)
…

第二章深入決議Handler訊息機制
第一節 宏觀理論分析與Message原始碼分析
第二節MessageQueue的原始碼分析
第三節Looper的原始碼分析
第四節handler的原始碼分析
第五節Handler機制實作原理總結
第六節Handler面試題全決議

第三章Dalvik VM行程系統
第一節Android系統啟動-綜述
第二節Init篇
第三節zygote篇
第四節SystemServer上篇
第五節SystemServer下篇

第四章深入決議WMS

第五章PackageMS啟動
PackageMS相關框架類
PackageMS啟動程序

需要我的筆記的可以在下方二維碼中免費領取,

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/299213.html
標籤:其他
