Android 體系架構解讀
1、引言
馬上就2017年了,時間過得真快。最近學習了一下架構師相關的能力解析和整理了一下自己在應用軟體架構、MVC、分層上面的理解(這個不僅僅是Android系統,也是windows客戶端系統,也是web系統)
掐指一算,我從11年末開始搞安卓到現在也5年了,在這期間做過好些個Android應用,也有幸在application framework裡面倒騰過一陣子。Android相關的知識在我腦海裡一直散亂的擺放著,也沒有認認真真整理一下。今天來想想這麼多年,我理解的Android體系架構的一些要點在哪裡。
2、Android 系統架構圖
從網上很容易就找到了這個Android系統架構圖。分層結構非常漂亮
大家剛開始做安卓應用的時候,可能會撇到這張圖,不會覺得這個圖有什麼用。絕大部分人花相當大的時間在Application層上面,接觸到了Framework層,其它層沒有看到,也能把應用做出來,但是要做好應用的話,就得學習好Android Framework, 理解好DalvikVirtualMachine,用好一些Libraries。如果所做的事情涉及到硬體、驅動、安全相關,還需要關注HAL和LINUS KERNEL
3、Linux Kernel 層
Android基於Linux 2.6提供核心系統服務,例如:安全、記憶體管理、程序管理、網路堆疊、驅動模型等等。從上圖可以看到,滿滿的都是Drivers,有一些是為Android特有定製的,是Linux核心的增強:Shared Memory Driver, Binder Driver, Low Memory Killer,Logger 等等,另外一些就是外設特有的Driver和感測器Driver,比如WIFI driver、Bluetooth driver、GPS driver等等
Android裡面特有的程序間通訊:Binder IPC
做資料採集的人可以深度瞭解的: Logger,資料採集一般在應用層做就可以了,如果要做到最高效,需要走到最底層
4、HAL(Hardware Abstraction Layer)
HAL的全稱是Hardware Abstraction Layer,是Google應硬體廠商的智慧財產權的保護而提供出來的一個抽象層,這樣廠商可以以封閉原始碼形式提供硬體驅動模組。這個介面隔離做的真棒。這一層把介面定義好了,不同的廠商可以提供不同的硬體和不同的驅動。層與層之間就隔離了。正因為有這一層的抽象,一個Android 系統可以適配好多個廠商
這一個層次接觸比較少
5、Application Framework
看上去有各種各樣的Manager,以為事情都是它做的,實際上這些Manager只是一層客戶端代理,代理真正的服務提供,比如ActivityManager 是ActivityManagerService在執行,PackageManager是PackageManagerService在執行,WindowManager是WindowsManagerService在執行, ResouceManager對應到ResourceManagerService。當然還有其它好多Service,但是上面幾個是最重要的,其中任意一個就可以寫一個長篇。
ActivityManagerService Activity啟動流程
PackageManagerService
WindowManagerService
ResourceManagerService
這幾個位置先留著,以後有機會的時候慢慢寫點。
初看這些Service,很像是應用軟體開發的時候,業務邏輯層會提供各種各樣的Service供展現層呼叫。有一個大的區別是這些Service是跨程序的呼叫,一般的應用軟體Service和呼叫都是在同一個程序裡面的
6、applications
應用層是一個Android程式設計師需要精通的地方。一些很重要的從入門到精通的步驟
6.1 跑一個helloword
6.2 搞一搞四大元件,Activity、Service、BroadCastReceiver、ContentProvider
對於應用開發,Activity使用場景比較懂,Service比較少,BroadCastReceiver主要是使用,ContentProvider用的少
對於系統開發,多個應用聯合的場景下,對這4個元件都需要有比較深的理解。
6.3 四大元件生命週期
必經之路,尤其是Activity和Service的生命週期,需要把那幾張圖一看再看
6.4 執行緒模型
Handler、Looper、MessageQueue、AsyncTask
6.5 記憶體管理
參見http://blog.csdn.net/vshuang/article/details/39647167
6.6 View的繪製和事件訊息派發模型
要做自定義的控制元件的話,這個是逃不開的坎,onMeasure,onLayout, onDraw
6.8 資源載入
要學習應用的動態載入,對PackageManager和ResourceManager、AssetManager要知道很多
6.9 安全
混淆、簽名、https、加密演算法,反編譯 http://blog.csdn.net/vshuang/article/details/43639211
暫時就想到這些,後面再補充,非常有意思。裡面有些要點比較深,需要花很多時間才能慢慢理解,直到運用得比較好
7、結語
梳理了一下自己對於Android系統架構的知識點。看過的書也有好些,初級一點的集中在Application層,高階一點的比如原始碼解析集中在Application Framework層和對應的Framework Service,也有一些技術內幕集中在講偏重於Android的kernel層。另外單獨的一些技術要點也可以獨自成書,比如Android安全方面的書就不少,寫Android虛擬機器也可以出一本書。
技術永無止境。謹以這篇小文章紀念一下即將過去的2016年。