1.Android 系統架構 android分為四個層,從高層到低層分別是應用程式層、應用程式框架層、系統運行庫層和linux核心層,如下圖所示: 2.application應用程式層 該層提供一些核心應用程式包,例如電子郵件、簡訊、日曆、地圖、瀏覽器和聯繫人管理等。同時,開發者可以利用Java語言 ...
1.Android 系統架構
android分為四個層,從高層到低層分別是應用程式層、應用程式框架層、系統運行庫層和linux核心層,如下圖所示:
2.application應用程式層
該層提供一些核心應用程式包,例如電子郵件、簡訊、日曆、地圖、瀏覽器和聯繫人管理等。同時,開發者可以利用Java語言設計和編寫屬於自己的應用程式,而這些程式與那些核心應用程式彼此平等、友好共處
3.application framework應用程式框架層
該層是Android應用開發的基礎,提供API給寫application應用程式的人調用,常用到的類庫如下:
- 活動管理器(Activity Manager): 表示當前顯示的界面視窗,用來管理各個應用程式生命周期,為所有程式的視窗提供交互的介面.
- 視窗管理器(Window Manager): 對視窗程式進行管理
- 內容提供者(Content Provider): 提供一個應用程式訪問另一個應用程式數據的功能,實現應用間共用數據
- 視圖系統(View System): 創建應用所需的組件
- 包管理器(Package Manager): 管理應用安裝、卸載,應用版本號、版本名,查詢相關許可權等功能
- 電話管理器(Telephony Manager): 提供設備電話相關功能
- 資源管理器(Resource Manager): 提供各種非代碼資源供應用程式使用,如字元串,顏色,圖片,音頻等
- 位置管理器(Location Manager): 提供位置服務
- 通知管理器(Notification Manager): 使應用可以在系統狀態欄中顯示通知消息
- XMPP服務 : Google線上即時交流軟體中一個通用的進程,提供後臺推送服務
而四大組件又分為:
- activity活動 : 當前顯示的界面視窗, 一個Activity通常就是一個單獨的屏幕,當然也可以有多個Activity組成.然後上面的控制項也可以獲取用戶事件,來做出相應操作.
- service服務 : 用於後臺完成用戶操作,主要用於周期性的後臺監控和後臺服務,比如在後臺下載東西
- BroadCast Receiver廣播接收器 : 用來接收各處APP發出的廣播,但是多數的廣播是系統發起的.比如來電來信等.
- Content Provider內容提供器 : 通過它可以將自己的數據讓所有的應用程式訪問到,比如訪問電話簿聯繫人,主要用來共用數據
4.Libraries系統庫
系統庫大部分由C/C++編寫,提供的功能給Android應用程式框架來調用
5. Android runtime 運行庫
包含了Core Library和Dalvik虛擬機.
Core Library: 提供JAVA編程語言核心庫的大多數功能
Dalvik虛擬機(dvm): 每個Java程式都離不開Java虛擬機, Android系統也實現了自己的一個類似JVM但是更適合嵌入式平臺的虛擬機——Dalvik。Dalvik的功能等同於JVM,為Android平臺上的Java代碼提供了運行環境.唯一不同的是dvm執行的是.dex文件,jvm執行的是.class文件.
過程: android程式編譯完之後生產.class文件,然後,dex工具會把.class文件處理成.dex文件,然後把資源文件和.dex文件等打包成.apk文件,如下圖所示:
dvm的優點在於:基於寄存器存取,而非虛擬棧,可以根據硬體實現最大的優化,比較適合移動設備。
5.1 android 4.4開始, DVM被替換
由於DVM安裝後的APP是位元組碼,所以每次打開APP的時候,都會去把位元組碼翻譯為機器碼,導致APP運行效率降低,用戶體驗很差.
所以在 Android 4.4開始,ART(Android Runtime)虛擬機發佈,用來替換 Dalvik 虛擬機,Android 4.4 預設採用 DVM,但可以選擇ART(如下圖所示)。在 Android 5.0 開始預設使用 ART,DVM 從此被淘汰,並且ART 支持 64 位並相容 32 位 CPU,而DVM只支持32 位 CPU.
ART優點:安裝應用程式時會進行一次 AOT(ahead of time compilation, 預編譯),將位元組碼編譯成機器碼並存儲在本地,這樣APP每次運行時就不需要執行編譯了,APP運行效率大大提升,耗電量也會降低.
ART缺點: 應用程式的安裝時間變長,並且安裝後的存儲空間占用多一些(存儲有機器碼的原因)
6.linux內核
用來運行應用程式,並包含各種驅動,嚮應用層提供調用。
未完待續.