第一章 概述(Android四層體系結(jié)構(gòu))

第一章 概述(Android四層體系結(jié)構(gòu))
參考資料:
《Android應(yīng)用程序開發(fā)》ISBN 9787302283164
參考軟件:
Android Studio、Eclipse+ADT、Android SDK、JDK
Android特性
? 應(yīng)用程序框架支持組件的重用與替換
??Dalvik 虛擬機(jī)專為移動(dòng)設(shè)備優(yōu)化
? 集成的瀏覽器基于開源的WebKit 引擎
? 優(yōu)化的圖形庫包括定制的2D 圖形庫,基于OpenGL ES 1.0的3D 圖形庫
??SQLite?用作結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)
? 多媒體支持包括常見的音頻、視頻和靜態(tài)圖像格式(如MPEG4, H.264, MP3, AAC, AMR, JPG, PNG , GIF)
? GSM 電話技術(shù)(依賴于硬件)
? 藍(lán)牙Bluetooth, EDGE, 3G, 和WiFi(依賴于硬件)
? 照相機(jī),GPS,指南針,和加速度計(jì)(accelerometer)(依賴于硬件)
? 豐富的開發(fā)環(huán)境包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse 集成開發(fā)環(huán)境插件
Android體系結(jié)構(gòu)
1、Android體系結(jié)構(gòu)
(1)Android本身是一套軟件堆棧(或稱為軟件層疊架構(gòu)),它包含三部分:操作系統(tǒng)、中間件、應(yīng)用程序。AndroidSDK提供了完備的工具和API,供開發(fā)人員在Android平臺(tái)上使用Java開發(fā)應(yīng)用程序。?
(2)何為軟件堆棧?首先要知道堆棧是什么,堆棧的實(shí)現(xiàn)思想是先進(jìn)后出(FILO),也就是說棧底的東西是最先進(jìn)來的,棧底是封死的,只能進(jìn)去而不能出來;而棧頂?shù)臇|西都是最后進(jìn)來的,由于不是封死的,所以它是朝著棧底方向挪移。將這個(gè)堆棧概念提升為軟件堆棧,假設(shè)地說,棧底就是操作系統(tǒng),棧頂就是實(shí)際的應(yīng)用程序。換句話說就是軟件之間的一種層疊的架構(gòu),一層疊一層,最底層的當(dāng)然還是操作系統(tǒng)。?
(3)Android架構(gòu)體系:?

2、各層介紹
(1)Linux Kernel
? ? ? ? ?Google選擇了Linux作為Android的底層支撐系統(tǒng)。當(dāng)前的 Android系統(tǒng)是基于Linux2.6內(nèi)核,其核心系統(tǒng)服務(wù)如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)路協(xié)議以及驅(qū)動(dòng)模型都依賴于Linux內(nèi)核。
(2)Android Runtime
?運(yùn)行時(shí)環(huán)境可分為核心庫和Dalvik虛擬機(jī)兩部分。
核心庫提供了Java語言API中的大多數(shù)功能,同時(shí)也包含了Android的一些核心API,如android.os、android.net、android.media等等。
Dalvik是Google公司自己設(shè)計(jì)用于Android平臺(tái)的虛擬機(jī),它可以簡單的完成進(jìn)程隔離和線程管理,并且可以提高內(nèi)存的使用效率。
Dalvik和標(biāo)準(zhǔn)Java虛擬機(jī)(JVM)首要差別
Dalvik 基于寄存器,而 JVM 基于棧。
基于寄存器的虛擬機(jī)對(duì)于編譯后變大的程序來說,在它們執(zhí)行的時(shí)候,花費(fèi)的時(shí)間更短。(Also of register-based VMs allow faster execution times at the expense of programs which are larger after compilation.)
*Dalvik和Java運(yùn)行環(huán)境的區(qū)別
1:Dalvik主要是完成對(duì)象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
2:Dalvik負(fù)責(zé)進(jìn)程隔離和線程管理,每一個(gè)Android應(yīng)用在底層都會(huì)對(duì)應(yīng)一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例,其代碼在虛擬機(jī)的解釋下得以執(zhí)行。
3:不同于Java虛擬機(jī)運(yùn)行java字節(jié)碼,Dalvik虛擬機(jī)運(yùn)行的是其專有的文件格式Dex
4:dex文件格式可以減少整體文件尺寸,提高I/o操作的類查找速度。
5:odex是為了在運(yùn)行過程中進(jìn)一步提高性能,對(duì)dex文件的進(jìn)一步優(yōu)化。
6:所有的Android應(yīng)用的線程都對(duì)應(yīng)一個(gè)Linux線程,虛擬機(jī)因而可以更多的依賴操作系統(tǒng)的線程調(diào)度和管理機(jī)制
7:有一個(gè)特殊的虛擬機(jī)進(jìn)程Zygote,他是虛擬機(jī)實(shí)例的孵化器。它在系統(tǒng)啟動(dòng)的時(shí)候就會(huì)產(chǎn)生,它會(huì)完成虛擬機(jī)的初始化,庫的加載,預(yù)制類庫和初始化的操作。如果系統(tǒng)需要一個(gè)新的虛擬機(jī)實(shí)例,它會(huì)迅速復(fù)制自身,以最快的數(shù)據(jù)提供給系統(tǒng)。對(duì)于一些只讀的系統(tǒng)庫,所有虛擬機(jī)實(shí)例都和Zygote共享一塊內(nèi)存區(qū)域。
(3)Libraries
系統(tǒng)庫是應(yīng)用程序框架的支撐,是連接應(yīng)用程序框架層與Linux內(nèi)核層的重要紐帶。其主要包含以下幾個(gè)部分:
SurfaceManager:執(zhí)行多個(gè)應(yīng)用程序時(shí)候,負(fù)責(zé)管理顯示與存取操作間的互動(dòng),另外也負(fù)責(zé)2D繪圖與3D繪圖進(jìn)行顯示合成。
MediaFramework:多媒體庫,支持多種常用的音頻、視頻格式錄制和回放,編碼格式包括MPEG4、MP3、H 264、AAC、ARM。
SQLite:輕量級(jí)的關(guān)系型數(shù)據(jù)庫引擎
OpenGL|ES:根據(jù)OpenGL ES1.0 API標(biāo)準(zhǔn)實(shí)現(xiàn)的3D繪圖函數(shù)庫
FreeType:提供點(diǎn)陣字與向量字的描繪與顯示
WebKit:開源的瀏覽器引擎,支持CSS,JAVASCRIPT,DOM等腳本語言
SGL:底層的2D圖形渲染引擎
SSL:在Andorid上通信過程中實(shí)現(xiàn)安全認(rèn)證
Libc:從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫,專門為基于embeddedlinux的設(shè)備定制
(4)Applications
? ?應(yīng)用程序框架層是開發(fā)者從事Android應(yīng)用開發(fā)的基礎(chǔ),很多核心應(yīng)用程序也是通過這一層來實(shí)現(xiàn)其核心功能,該層簡化了組件的重用,開發(fā)人員可以直接使用它提供的組件進(jìn)行快速的應(yīng)用程序開發(fā),也可以通過繼承而實(shí)現(xiàn)個(gè)性化的拓展。以下是這次層中,各個(gè)部分的功能:
? ? ? ?Activity Manager(活動(dòng)管理器):管理各個(gè)應(yīng)用程序生命周期以及通常的導(dǎo)航回退功能。
? ? ? ?Window Manager(窗口管理器):管理所有的窗口程序
? ? ? ?Content Provider(內(nèi)容提供器):通過它可以在不同應(yīng)用程序之間存取或者分享數(shù)據(jù)
? ? ? ?View System(視圖系統(tǒng)):構(gòu)建應(yīng)用程序的基本組件
? ? ? ?Notification Manager(通知管理器):通過它應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息
? ? ? ?Package Manager(包管理器):Android系統(tǒng)內(nèi)的程序管理,可以查看Android應(yīng)用程序以及Activity的相關(guān)信息
? ? ? ?Telephony Manager(電話管理器):管理所有的移動(dòng)設(shè)備功能
? ? ? ?Resource Manager(資源管理器):提供應(yīng)用程序使用的各種非代碼資源,如本地化字符串、圖片、布局文件、顏色文件,主題樣式,二進(jìn)制文件等
? ? ? ?Location Manager(位置管理器):提供位置服務(wù)
? ? ? ?XMPP Service(XMPP服務(wù)):提供Google Talk服務(wù)
重點(diǎn):Android四層體系結(jié)構(gòu),Dalvik 虛擬機(jī)與JVM的區(qū)別,dex文件,SQLite數(shù)據(jù)庫