本系列文章只為學習交流,切勿商業裝載,查看原文可查看作者[官方博客](http://blog.csdn.net/Innost)
### 內容簡介
《深入理解Android:卷2》是“深入理解Android”系列的第2本,第1本書上市后獲得廣大讀者高度評價,在Android開發者社群內口口相傳。本書不僅繼承了第1本書的優點并改正了其在細微處存在的一些不足,而且還在寫作的總體思想上進行了創新,更強調從系統設計者的角度去分析Android系統中各個模塊內部的實現原理和工作機制。從具體內容上講,本書的重點是Android Framework的Java層,對Java層涉及的核心模塊和服務進行了深入而細致的分析。通過本書,讀者不僅能對Android系統本身有更深入的理解,而且還能掌握分析大型復雜源代碼的能力。
《深入理解Android:卷2》一共8章:第1章介紹了閱讀本書所需要做的準備工作,包括Android 4.0源碼的下載和編譯、Eclipse環境的搭建,以及Android系統進程(system_process)的調試等;第2章對Java Binder和MessageQueue的實現進行了深入分析;第3章仔細剖析了SystemServer的工作原理,這些服務包括EntropyService、DropboxManagerService、DiskStatsService、DeviceStorageMonitorService、SamplingProfilerService和ClipboardService;第4章對系統中負責Package信息查詢和APK安裝、卸載、更新等工作的服務PackageManagerService進行了詳細分析;第5章則對Android系統中負責電源管理的核心服務 PowerManagerService的原理進行了一番深入的分析;第6章以ActivityManagerService為分析重點,它的啟動、Activity的創建和啟動、BroadcastReceiver的工作原理、Android中的進程管理等內容展開了較為深入的研究;第7章對ContentProvider的創建和啟動、SQLite、Cursor query和close的實現等進行了深入分析;第8章以ContentService和AccountManagerService為分析對象,介紹了數據更新通知機制的實現,以及賬戶管理和數據同步等相關知識。
### 本書主要內容及特色
本書是筆者“深入理解Android”系列的第二本,這一本將關注重點放在了Android Framework的Java層。在眾多可供分析的知識點中,筆者另辟蹊徑,選擇了SystemServer中的服務(Service)作為主人公。這些Service大體可由圖1來表示。

:-: 圖1 SystemServer中的服務
由圖1可知,SystemServer中的服務可劃分為7大類共43項(包括Watchdog在內):
- 位于第一大類的是Android的核心服務,如ActivityManagerService、WindowManager-Service等。
- 位于第二大類的是和通信相關的服務,如Wifi的相關服務、Telephone的相關服務。
- 位于第三大類的是和系統功能相關的服務,如AudioService、MountService、UsbService等。
- 位于第四大類的是BatteryService、VibratorService等服務。
- 位于第五大類的是EntropyService、DiskStatsService、Watchdog等相對獨立的服務。
- 位于第六大類的是藍牙服務。
- 位于第七大類的是UI方面的服務,如狀態欄服務、通知管理服務等。
以上這些服務就是Android Framework Java層的核心。毫不夸張地說,它們也是Android系統的基石。另外,這些服務的內容遠非一本書所能囊括。作為Android Java層Framework分析的先頭部隊,本書涵蓋了以下內容:
第1章,介紹了閱讀本書需要做的一些準備工作,包括Android 4.0源碼的下載和編譯、Eclipse開發環境的搭建,以及Android系統進程(system_process)的調試等。
第2章,介紹了Java Binder和MessageQueue的實現。
第3章,介紹了SystemServer,并分析了圖1中第五類包含的服務的工作原理。這些服務包括EntropyService、DropBoxManagerService、DiskStatsService、DeviceStorageMonitorService、SamplingProfilerService和ClipboardService。
第4章,分析了PackageManagerService,該服務負責Android系統中的Package信息查詢和APK安裝、卸載、更新等方面的工作。
第5章,講解了PowerManagerService,它是Android中電源管理的核心服務。本章對其中的WakeLock、Power按鍵處理、BatteryStatsService和BatteryService都做了一番較為深入的分析。
第6章,以ActivityManagerService為分析重點,該服務是Android 的核心服務。本章對ActivityManagerService的啟動、Activity的創建和啟動、BroadcastReceiver的工作原理、Android中的進程管理等內容進行了較為深入的研究。
第7章,對ContentProvider的創建和啟動、SQLite相關知識、Cursor query和close的實現等進行了較為深入的分析。
第8章,以ContentService和AccountManagerService為分析對象,介紹了數據更新通知機制的實現、賬戶管理和數據同步等方面的知識。
**圖1中的其他服務將會在“深入理解Android”系列的其他書中詳細分析。該系列書的規劃請見本書最后面的“深入理解Android系列圖書路線圖”。**
本書以直接剖析源碼的方式進行講解,旨在引領讀者一步步深入于Android系統中相關模塊的內部原理,去理解它們是如何實現、如何工作的。在分析過程中,筆者根據個人研究Android代碼的心得,采用了精簡流程和逐個擊破的方法。同時,筆者還提出了一些難度不大的知識點、相關的補充閱讀資料,甚至筆者在實際項目中遇到的開放式問題,留給讀者自行研究和探討。總之,筆者希望讀者在閱讀完本書后,至少能有以下兩個收獲:
- 能從“基于Android并高于Android”的角度來看待和分析Android。
- 能初步具有大型復雜代碼的分析能力。
**讀者對象**
適合閱讀本書的讀者包括:
(1)Android應用開發工程師
雖然應用開發工程師平常接觸的多是Android SDK,但是只有更深入地理解了Android系統運行原理,才能寫出更健壯、更高效的模塊。
(2)Android系統開發工程師
系統開發工程師常常需要深入理解系統的運轉過程,而本書所涉及的內容正是他們在工作和學習中最想了解的。那些對具體服務(如ActivityManagerService、PackageManagerService)感興趣的讀者,也可以單刀直入,閱讀本書相關章節。
(3)對Android系統運行原理感興趣的讀者
這部分讀者需要具有基本的Android開發知識基礎。
**如何閱讀本書**
本書是針對Android源碼進行分析的,而源碼文件所在的路徑一般都很長,例如,文件AndroidRuntime.cpp的真實路徑是frameworks/base/core/jni/AndroidRuntime.cpp。為了行文方便,在各章節開頭,均把本章涉及的源碼路徑全部列出,而在具體分析源碼時,則只列出該源碼的文件名。例如:
[-->AndroidRuntime.cpp]
* * * * *
//這里是源碼和一些注釋
* * * * *
另外,本書在描述類之間的關系及函數調用流程上,使用了UML的靜態類圖及序列圖。UML是一個強大的工具,但它的建模規范過于煩瑣,為更簡單清晰地描述事情的本質,本書并未完全遵循UML的建模規范。這里僅舉一例,如圖2所示。

:-: 圖2 UML示例圖
在圖2中:
- 外部類內部的方框用于表示內部類。另外,“外部類A.內部類B”也用于表示內部類。
- 接口和普通類用同一種框圖表示。
本書所使用的UML圖都比較簡單,讀者不必花費大量時間專門學習UML。
這里有必要提醒一下,要閱讀此書,應具有Java基本知識。
另外,本書和《深入理解Android 卷I》(簡稱“卷I”)部分章節有一定聯系,主要集中在Binder和MessageQueue部分。讀者可將“卷I中”這部分內容作為補充閱讀資料來學習。
- 前言
- 第1章 搭建Android源碼工作環境
- 1.1 Android系統架構
- 1.2 搭建開發環境
- 1.2.1 下載源碼
- 1.2.2 編譯源碼
- 1.2.3 利用Eclipse調試system_process
- 1.3 本章小結
- 第2章 深入理解Java Binder和MessageQueue
- 2.1 概述
- 2.2 Java層中的Binder架構分析
- 2.2.1 Binder架構總覽
- 2.2.2 初始化Java層Binder框架
- 2.2.3 addService實例分析
- 2.2.4 Java層Binder架構總結
- 2.3 心系兩界的MessageQueue
- 2.3.1 MessageQueue的創建
- 2.3.2 提取消息
- 2.3.3 nativePollOnce函數分析
- 2.3.4 MessageQueue總結
- 2.4 本章小結
- 第3章 深入理解SystemServer
- 3.1 概述
- 3.2 SystemServer分析
- 3.2.1 main函數分析
- 3.2.2 Service群英會
- 3.3 EntropyService分析
- 3.4 DropBoxManagerService分析
- 3.4.1 DBMS構造函數分析
- 3.4.2 dropbox日志文件的添加
- 3.4.3 DBMS和settings數據庫
- 3.5 DiskStatsService和DeviceStorageMonitorService分析
- 3.5.1 DiskStatsService分析
- 3.5.2 DeviceStorageManagerService分析
- 3.6 SamplingProfilerService分析
- 3.6.1 SamplingProfilerService構造函數分析
- 3.6.2 SamplingProfilerIntegration分析
- 3.7 ClipboardService分析
- 3.7.1 復制數據到剪貼板
- 3.7.2 從剪切板粘貼數據
- 3.7.3 CBS中的權限管理
- 3.8 本章小結
- 第4章 深入理解PackageManagerService
- 4.1 概述
- 4.2 初識PackageManagerService
- 4.3 PKMS的main函數分析
- 4.3.1 構造函數分析之前期準備工作
- 4.3.2 構造函數分析之掃描Package
- 4.3.3 構造函數分析之掃尾工作
- 4.3.4 PKMS構造函數總結
- 4.4 APK Installation分析
- 4.4.1 adb install分析
- 4.4.2 pm分析
- 4.4.3 installPackageWithVerification函數分析
- 4.4.4 APK 安裝流程總結
- 4.4.5 Verification介紹
- 4.5 queryIntentActivities分析
- 4.5.1 Intent及IntentFilter介紹
- 4.5.2 Activity信息的管理
- 4.5.3 Intent 匹配查詢分析
- 4.5.4 queryIntentActivities總結
- 4.6 installd及UserManager介紹
- 4.6.1 installd介紹
- 4.6.2 UserManager介紹
- 4.7 本章學習指導
- 4.8 本章小結
- 第5章 深入理解PowerManagerService
- 5.1 概述
- 5.2 初識PowerManagerService
- 5.2.1 PMS構造函數分析
- 5.2.2 init分析
- 5.2.3 systemReady分析
- 5.2.4 BootComplete處理
- 5.2.5 初識PowerManagerService總結
- 5.3 PMS WakeLock分析
- 5.3.1 WakeLock客戶端分析
- 5.3.2 PMS acquireWakeLock分析
- 5.3.3 Power類及LightService類介紹
- 5.3.4 WakeLock總結
- 5.4 userActivity及Power按鍵處理分析
- 5.4.1 userActivity分析
- 5.4.2 Power按鍵處理分析
- 5.5 BatteryService及BatteryStatsService分析
- 5.5.1 BatteryService分析
- 5.5.2 BatteryStatsService分析
- 5.5.3 BatteryService及BatteryStatsService總結
- 5.6 本章學習指導
- 5.7 本章小結
- 第6章 深入理解ActivityManagerService
- 6.1 概述
- 6.2 初識ActivityManagerService
- 6.2.1 ActivityManagerService的main函數分析
- 6.2.2 AMS的 setSystemProcess分析
- 6.2.3 AMS的 installSystemProviders函數分析
- 6.2.4 AMS的 systemReady分析
- 6.2.5 初識ActivityManagerService總結
- 6.3 startActivity分析
- 6.3.1 從am說起
- 6.3.2 AMS的startActivityAndWait函數分析
- 6.3.3 startActivityLocked分析
- 6.4 Broadcast和BroadcastReceiver分析
- 6.4.1 registerReceiver流程分析
- 6.4.2 sendBroadcast流程分析
- 6.4.3 BROADCAST_INTENT_MSG消息處理函數
- 6.4.4 應用進程處理廣播分析
- 6.4.5 廣播處理總結
- 6.5 startService之按圖索驥
- 6.5.1 Service知識介紹
- 6.5.2 startService流程圖
- 6.6 AMS中的進程管理
- 6.6.1 Linux進程管理介紹
- 6.6.2 關于Android中的進程管理的介紹
- 6.6.3 AMS進程管理函數分析
- 6.6.4 AMS進程管理總結
- 6.7 App的 Crash處理
- 6.7.1 應用進程的Crash處理
- 6.7.2 AMS的handleApplicationCrash分析
- 6.7.3 AppDeathRecipient binderDied分析
- 6.7.4 App的Crash處理總結
- 6.8 本章學習指導
- 6.9 本章小結
- 第7章 深入理解ContentProvider
- 7.1 概述
- 7.2 MediaProvider的啟動及創建
- 7.2.1 Context的getContentResolver函數分析
- 7.2.2 MediaStore.Image.Media的query函數分析
- 7.2.3 MediaProvider的啟動及創建總結
- 7.3 SQLite創建數據庫分析
- 7.3.1 SQLite及SQLiteDatabase家族
- 7.3.2 MediaProvider創建數據庫分析
- 7.3.3 SQLiteDatabase創建數據庫的分析總結
- 7.4 Cursor 的query函數的實現分析
- 7.4.1 提取query關鍵點
- 7.4.2 MediaProvider 的query分析
- 7.4.3 query關鍵點分析
- 7.4.4 Cursor query實現分析總結
- 7.5 Cursor close函數實現分析
- 7.5.1 客戶端close的分析
- 7.5.2 服務端close的分析
- 7.5.3 finalize函數分析
- 7.5.4 Cursor close函數總結
- 7.6 ContentResolver openAssetFileDescriptor函數分析
- 7.6.1 openAssetFileDescriptor之客戶端調用分析
- 7.6.2 ContentProvider的 openTypedAssetFile函數分析
- 7.6.3 跨進程傳遞文件描述符的探討
- 7.6.4 openAssetFileDescriptor函數分析總結
- 7.7 本章學習指導
- 7.8 本章小結
- 第8章 深入理解ContentService和AccountManagerService
- 8.1 概述
- 8.2 數據更新通知機制分析
- 8.2.1 初識ContentService
- 8.2.2 ContentResovler 的registerContentObserver分析
- 8.2.3 ContentResolver的 notifyChange分析
- 8.2.4 數據更新通知機制總結和深入探討
- 8.3 AccountManagerService分析
- 8.3.1 初識AccountManagerService
- 8.3.2 AccountManager addAccount分析
- 8.3.3 AccountManagerService的分析總結
- 8.4 數據同步管理SyncManager分析
- 8.4.1 初識SyncManager
- 8.4.2 ContentResolver 的requestSync分析
- 8.4.3 數據同步管理SyncManager分析總結
- 8.5 本章學習指導
- 8.6 本章小結