Android四層體系架構


Application應用層mysql

  應用是用Java語言編寫的運行在虛擬機上的程序,即圖中最上層的藍色部分.手機的上層應用其實,Google最開始時就在Android系統中捆綁了一些核心應用好比e-mail客戶端、SMS短消息程序、日曆、地圖、瀏覽器、聯繫人管理程序,等等。sql


Application FrameWork應用框架層數據庫

  這一層便是編寫Google發佈的核心應用時所使用的API框架,開發人員一樣可使用這些框架來開發本身的應用,這樣便簡化了程序開發的架構設計,可是必須遵照其框架的開發原則,組件以下:編程

  豐富而又可擴展的視圖(Views):能夠用來構建應用程序,它包括列表(lists)、網格(grids)、文本框(text boxes)、按鈕(buttons), 甚至可嵌入的Web瀏覽器。瀏覽器

  內容提供器(Content Providers):它可讓一個應用訪問另外一個應用的數據(如聯繫人數據庫),或共享它們本身的數據安全

  資源管理器(Resource Manager):提供非代碼資源的訪問,如本地字符串、圖形、和佈局文件(layout files)。服務器

  通知管理器 (Notification Manager):應用能夠在狀態欄中顯示自定義的提示信息。網絡

  活動管理器(Activity Manager):用來管理應用程序生命週期並提供經常使用的導航退回功能。架構

  窗口管理器(Window Manager):管理全部的窗口程序。框架

  包管器(Package Manager):Android系統內的程序管理

  電話管理器(Telephony Manager):主要提供Telephony相關信息的查詢/修改功能,以及Phone狀態監聽功能,封裝的方法主要是提供給APP上層使用。

  定位管理器(Location Manager):獲取經緯度及定位過程

  


在Android SDK中內置了一些對象,其中最重要的組件要屬Activity、Intent、Services以及Content Providers四個組件。

  Activity活動:一個活動就是一個用戶界面。一個應用程序能夠定義一個或多個活動,每一個活動都可以保存和恢復自身的狀態。
  Intent:Intent是描述一個特定活動的一種機制,好比「選取照片」、「撥打電話」等這類具體動做。在Android中,全部的東西都是經過Intents完成的,所以開發者有機會替代或重用大量的組件。好比有一個「發送郵件」的intent,當你應用程序須要發送郵件時能夠激活這個intent。開發者甚至能夠從新編寫一個新的郵件應用程序,並註冊爲活動以處理這個intent代替標準的郵件應用程序。那麼其餘應用程序就可使用新編寫應用程序來發送郵件了。
  Services服務:一個服務Service就是運行在後臺、沒有用戶直接交互的任務,與Unix daemon相似。好比要作一個音樂播放器,可能會被另外一個活動激活,但音樂是須要做爲背景音樂播放,那麼這種程序就能夠考慮做爲一種服務Service。而後別的活動能夠來操做這個播放器。Android中內置了不少服務,能夠方便的使用API進行訪問。
  ContentProviders內容提供者:一個內容提供者content Provider就是由自定義的API封裝讀寫操做的一套數據。Content Provider是不一樣應用程序之間共享全局數據最好的方式。好比,Google提供了聯繫人的Content Provider,包括姓名、地址、電話等全部信息在內的聯繫方式可以被全部應用程序使用。


Libraries系統運行庫層

當咱們使用Android 應用框架時,Android系統會經過一些C/C++庫來支持對咱們使用的各個組件,使其能更好地爲開發者服務

Bionic系統 C 庫:C語言標準庫,系統最底層的庫,C庫經過Linux系統來調用。

  多媒體庫(MediaFrameword):Android系統多媒體庫,基於 PacketVideo OpenCORE,該庫支持多種經常使用的音頻、視頻格式的回放和錄製以及一些圖片,好比:MPEG四、MP三、AAC、AMR、JPG, PNG 等。

  SurFace Manager:界面管理器

  Media Framework:多媒體框架

  SQLite:開源輕量級數據庫,和mysql相似

  SGL:2D圖形引擎庫。

  SSL:位於TVP/IP協議與各類應用層協議之間,爲數據通信提供支持。

  OpenGL ES 1.0:3D效果的支持。

  SQLite:關係數據庫。

  Webkit:Web瀏覽器引擎。

  FreeType :位圖(Bitmap)及矢量(Vector)。


Anndroid RunTim運行時  

  每一個Java程序都運行在Dalvik虛擬機之上。與PC同樣,每一個Android應用程序都有本身的進程,Dalvik虛擬機只執行".dex"的可執行文件。當Java程序經過編譯,最後還須要經過SDK中的 "dx"工具轉化成".dex"格式才能正常地在虛擬機上執行。

  圖中黃色的部分則是Dalvik虛擬機

  Google於2007年末正式發佈了Android SDK, 做爲 Android系統的重要特性,Dalvik虛擬機也第一次進入了人們的視野。它對內存的高效使用,以及在低速CPU上表現出的高性能,確實使人另眼相看。Android系統能夠簡單地完成進程隔離和線程管理。每個Android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下得以執行。不少人認爲Dalvik虛擬機是一個Java虛擬機,由於Android的編程語言偏偏就是Java語言。可是這種說法並不許確,由於Dalvik虛擬機並非按照Java虛擬機的規範來實現的,二者並不兼容;同時還要兩個明顯的不一樣:Java虛擬機運行的是Java字節碼,而Dalvik虛擬機運行的則是其專有的文件格式DEX(Dalvik Executable)的文件。在Java SE程序中的Java類會被編譯成一個或者多個字節碼文件(.class)而後打包到JAR文件,然後Java虛擬機會從相應的CLASS文件和JAR文件中獲取相應的字節碼;Android應用雖然也是使用Java語言進行編程,可是在編譯成CLASS文件後,還會經過一個工具(dx)將應用全部的CLASS文件轉換成一個DEX文件,然後Dalvik虛擬機會從其中讀取指令和數據。

  Dalvik虛擬機很是適合在移動終端上使用,相對於在桌面系統和服務器系統運行的虛擬機而言,它不須要很快的CPU速度和大量的內存空間。根據Google的測算,64M的RAM已經可以讓系統正常運轉了。其中24M被用於底層系統的初始化和啓動,另外20M被用於高層啓動高層服務。固然,隨着系統服務的增多和應用功能的擴展,其所消耗的內存也勢必愈來愈大。概括起來,Dalvik虛擬機有以下幾個主要特徵:

專有的DEX文件格式

  DEX是Dalvik虛擬機專用的文件格式,而爲何棄用已有的字節碼文件(.CLASS文件)而採用新的格式呢?

(1) 一個應用中會定義不少類,編譯完成後即會有不少相應的CLASS文件,CLASS文件中會有很多冗餘的信息,而DEX文件格式會把全部的CLASS文件內容整合到一個文件中。這樣,除了減小總體的文件尺寸和I/O操做,也提升了類的查找速度。

(2) 增長了新的操做碼的支持。

(3) 文件結構儘可能簡潔,使用等長的指令,藉以提升解析速度。

(4) 儘可能擴大隻讀結構的大小,藉以提升跨進程的數據共享。

DEX的優化

  DEX文件的結構是緊湊的,可是若是咱們還想運行時的性能有進一步提升,咱們就仍然須要對DEX文件進行進一步優化。優化主要是針對如下幾個方面:

(1) 調整全部字段的字節序(LITTLE_ENDIAN)和對齊結構中的每個域。

(2) 驗證DEX文件中的全部類。

(3) 對一些特定的類進行優化,對方法裏的操做碼進行優化。

基於寄存器

  相對於基於堆棧實現的虛擬機,基於寄存器實現的虛擬機雖然在硬件、通用性上要差一些,可是它在代碼的執行效率上卻更勝一籌。一個應用,一個虛擬機實例,一個進程

  每個Android應用都運行在一個Dalvik虛擬機實例中,而每個虛擬機實例都是一個獨立的進程空間。虛擬機的線程機制、內存分配和管理、Mutex等的實現都依賴底層操做系統。全部Android應用的線程都對應一個Linux線程,虛擬機於是能夠更多地依賴操做系統的線程調度和管理機制。不一樣的應用在不一樣的進程空間裏運行,加之對不一樣來源的應用都使用不一樣的Linux用戶來運行,能夠最大程度地保護應用的安全和獨立運行。

 


Linux內核層

Android的核心繫統服務基於Linux2.6內核,如安全性、內存管理、進程管理、網絡協議棧和驅動模型等都依賴於Linux2.6內核。Linux內核同時也做爲硬件和軟件棧之間的抽象層,所有都是驅動.

Android更多的是須要一些與移動設備相關的驅動程序,主要的驅動以下所示。

  顯示驅動(Display Driver):基於Linux的幀緩衝(Frame Buffer)驅動。

  鍵盤驅動(KeyBoard Driver):做爲輸入設備的鍵盤驅動。

  Flash內存驅動(Flash Memory Driver):基於MTD的Flash驅動程序。

  照相機驅動(Camera Driver):經常使用的基於Linux的v4l2(Video for Linux)驅動。

  音頻驅動(Audio Driver):經常使用的基於ALSA(Advanced Linux Sound Architecture)的高級Linux聲音體系驅動。

  藍牙驅動(Bluetooth Driver):基於IEEE 802.15.1標準的無線傳輸技術。

  WiFi驅動(Camera Drive):基於IEEE 802.11標準的驅動程序。

  Binder IPC驅動:Android的一個特殊的驅動程序,具備單獨的設備節點,提供進程間通信的功能。

  Power Management(能源管理):好比電池電量等。

USB Driver(usb驅動)

相關文章
相關標籤/搜索