理解Android Framework


一 . Android 系統架構

 

Android是一個包括操作系統,中間件和關鍵應用的移動設備軟件堆;

作為一個開源的軟件,android包含了眾多的功能和龐大的代碼,他的代碼基於linux。

 

1. Android系統架構圖

 

 

 

2. Android 軟件架構介紹

Android系統架構和其操作系統一樣,采用了分層的架構。

從架構圖看,Android系統架構分為四個層,從高層到低層分別為:

  • 應用程序層
  • 應用程序框架層
  • 系統運行庫層
  • linux核心層

 

各層之間的聯系:

  • Android的第一層是有C語言實現,第二層由C和C++實現,第3、4層主要是有java實現的。
  • 第1、2層之間,從linux的操作系統的角度來看,是由內核和用戶空間的分界線,
  • 第2、3層之間是本地代碼層和java代碼層的接口。
  • 第3、4層之間,是android的系統API的接口。
  • 第一層運行與內核空間,第2、3、4運行與用戶空間。

 

3. 應用程序層

Android會同一系列核心應用程序包一起發布,該應用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯系人管理程序等。

所有的應用程序都是使用JAVA語言編寫的。

 

4. 應用程序框架層

開發人員可以完全訪問核心應用程序所使用的API框架。
隱藏在每個應用后面的是一系列的服務和系統, 其中包括:

  • 豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。
  • 內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數據(如聯系人數據庫), 或者共享它們自己的數據
  • 資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。
  • 通知管理器 (Notification Manager) 使得應用程序可以在狀態欄中顯示自定義的提示信息。
  • 活動管理器( Activity Manager) 用來管理應用程序生命周期並提供常用的導航回退功能。有關更多的細節和怎樣從頭寫一個應用程序,請參考 如何編寫一個 Android 應用程序.

       等等。

 

5. 系統運行庫層

Android系統架構 包含一些C/C++庫,這些庫能被Android系統中不同的組件使用。它們通過 Android 應用程序框架為開發者提供服務。

以下是一些核心庫:

  • 系統 C 庫 : 一個從 BSD 繼承來的標准 C 系統函數庫( libc ), 它是專門為基於 embedded linux 的設備定制的。
  • 媒體庫 : 基於 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG。
  • Surface Manager : 對顯示子系統的管理,並且為多個應用程序提 供了2D和3D圖層的無縫融合。
  • LibWebCore : 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。
  • SGL : 底層的2D圖形引擎
  • 3D libraries : 基於OpenGL ES 1.0 APIs實現;該庫可以使用硬件 3D加速(如果可用)或者使用高度優化的3D軟加速。
  • FreeType :位圖(bitmap)和矢量(vector)字體顯示。
  • SQLite : 一個對於所有應用程序可用,功能強勁的輕型關系型數據庫引擎。

 

6. linux核心層

Android 的核心系統服務依賴於 Linux 2.6 內核,如安全性,內存管理,進程管理, 網絡協議棧和驅動模型。

Linux 內核也同時作為硬件和軟件棧之間的抽象層。

 

 

二 . Framework 啟動過程

 

  Android啟動過程包含從Linux內核加載到Home應用程序啟動的整個過程。

  整體流程如下:

  1.  android是基於linux內核的系統平台。啟動時,首先通過bootloader(系統加載器),加載Linux內核。在Linux加載啟動時,與普通的Linux啟動過程相同,先初始化內核,然后調用init進程。

  2.  Init進程啟動zygote:

      解析配置文件:init.rc(系統配置文件)及initXXX.rc(與硬件平台相關的文件)的內容執行一系列的命令,包括創建mount目錄,安裝文件系統,設置屬性,啟動屬性服務器,啟動Socket服務端口 --> 加載preload-classes和preload-resources(Framework大部分類及資源)--> fork啟動新的進程Zygote(其實是由fork和execv共同創建)。

   3.  Zygnote孵化第一個進程SystemServer,SystemServer啟動各種系統服務線程。

      SystemServer進程在Android的運行環境中扮演了"神經中樞"的作用,APK應用中能夠直接交互的大部分系統服務都在該進程中運行,常見的比如WindowManagerServer(Wms)、ActivityManagerSystemService(AmS)、PackageManagerServer(PmS)等,這些系統服務都是以一個線程的方式存在於SystemServer進程中。SystemServer的main()函數首先調用的是init1()函數,這是一個native函數,內部會進行一些與Dalvik虛擬機相關的初始化工作。該函數執行完畢后,其內部會調用Java端的init2()函數,該函數首先創建了一個ServerThread對象,該對象是一個線程,然后直接運行該線程,於是,從ServerThread的run()方法內部開始真正啟動各種服務線程。

基本上每個服務都有對應的Java類,從編碼規范的角度來看,啟動這些服務的模式可歸類為三種:模式一是指直接使用構造函數構造一個服務,由於大多數服務都對應一個線程,因此,在構造函數內部就會創建一個線程並自動運行。模式二是指服務類會提供一個getInstance()方法,通過該方法獲取該服務對象,這樣的好處是保證系統中僅包含一個該服務對象。模式三是指從服務類的main()函數中開始執行。無論以上何種模式,當創建了服務對象后,有時可能還需要調用該服務類的init()或者systemReady()函數以完成該對象的啟動

  4.  當以上服務線程都啟動后,AMS以systemReady調用完成最后啟動,mMainStack.resumeTopActivityLocked(null)-》mService.startHomeActivityLocked啟動第一個Activity。至此,FrameWork 的啟動完成。

 

三. 學習Framework 要知道的重點

 

1. Init

2. Zygnote

3. ActivityManagerService

4. PackageManagerService

5. WindowManagerService

6. PowerManagerService

7. InputMethodManagerService

8. NetworkManagementService

9. MountService

10. NotificationManagerService

11. Binder

 

更多SystemServer見下表

 

 

服務類名稱

作用描述

啟動模式

EntropyService

提供偽隨機數

1.0

PowerManagerService

電源管理服務

1.2/3

ActivityManagerService

最核心的服務之一,管理Activity

自定義

TelephonyRegistry

通過該服務注冊電話模塊的事件響應,比如重啟、關閉、啟動等

1.0

PackageManagerService

程序包管理服務

3.3

AccountManagerService

賬戶管理服務,是指聯系人賬戶,而不是Linux系統的賬戶

1.0

ContentService

ContentProvider服務,提供跨進程數據交換

3.0

BatteryService

電池管理服務

1.0

LightsService

自然光強度感應傳感器服務

1.0

VibratorService

震動器服務

1.0

AlarmManagerService

定時器管理服務,提供定時提醒服務

1.0

WindowManagerService

Framework最核心的服務之一,負責窗口管理

3.3

BluetoothService

藍牙服務

1.0+

DevicePolicyManagerService

提供一些系統級別的設置及屬性

1.3

StatusBarManagerService

狀態欄管理服務

1.3

ClipboardService

系統剪切板服務

1.0

InputMethodManagerService

輸入法管理服務

1.0

NetStatService

網絡狀態服務

1.0

NetworkManagementService

網絡管理服務

NMS.create()

ConnectivityService

網絡連接管理服務

2.3

ThrottleService

暫不清楚其作用

1.3




AccessibilityManagerService

輔助管理程序截獲所有的用戶輸入,並根據這

些輸入給用戶一些額外的反饋,起到輔助的效果

1.0

MountService

掛載服務,可通過該服務調用Linux層面的mount程序

1.0

NotificationManagerService

通知欄管理服務,Android中的通知欄和狀

態欄在一起,只是界面上前者在左邊,后者在右邊

1.3

DeviceStorageMonitorService

磁盤空間狀態檢測服務

1.0

LocationManagerService

地理位置服務

1.3

SearchManagerService

搜索管理服務

1.0

DropBoxManagerService

通過該服務訪問Linux層面的Dropbox程序

1.0

WallpaperManagerService

牆紙管理服務,牆紙不等同於桌面背景,

View系統內部,牆紙可以作為任何窗口的背景

1.3

AudioService

音頻管理服務

1.0

BackupManagerService

系統備份服務

1.0

AppWidgetService

Widget服務

1.3

RecognitionManagerService

身份識別服務

1.3

DiskStatsService

磁盤統計服務

1.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM