Chapter 1 閱讀前的準備工作
1.1 系統架構
1.1.1 Android 系統架構
1.1.2 本書的架構
1.2 搭建開發環境
1.2.1 下載原始碼
1.2.2 編譯原始碼
1.3 工具介紹
1.3.1 Source Insight 介紹
1.3.3 Busybox 的使用
1.4 本章小結
Chapter 2 深入理解JNI
2.1 JNI 概述
2.2 學習JNI 的實例:MediaScanner
2.3 Java 層的MediaScanner 分析
2.3.1 載入JNI 庫
2.3.2 Java 的native 函數和總結
2.4 JNI 層MediaScanner 的分析
2.4.1 註冊JNI 函數
2.4.2 資料類型轉換
2.4.3 JNIEnv 介紹
2.4.4 通過JNIEnv 操作jobject
2.4.5 jstring 介紹
2.4.6 JNI 類型簽名介紹
2.4.7 垃圾回收
2.4.8 JNI 中的異常處理
2.5 本章小結
Chapter 3 深入理解init
3.1 概述
3.2 init 分析
3.2.1 解析配置文件
3.2.2 解析service
3.2.3 init 控制service
3.2.4 屬性服務
3.3 本章小結
Chapter 4 深入理解zygote
4.1 概述
4.2 zygote 分析
4.2.1 AppRuntime 分析
4.2.2 Welcome to Java World
4.2.3 關於zygote 的總結
4.3 SystemServer 分析
4.3.1 SystemServer 的誕生
4.3.2 SystemServer 的重要使命
4.3.3 關於 SystemServer 的總結
4.4 zygote 的分裂
4.4.1 ActivityManagerService 發送請求
4.4.2 有求必應之響應請求
4.4.3 關於zygote 分裂的總結
4.5 延伸思考
4.5.1 虛擬機heapsize 的限制
4.5.2 開機速度優化
4.5.3 Watchdog 分析
4.6 本章小結
Chapter 5 深入理解常見類別
5.1 概述
5.2 以" 三板斧" 揭秘RefBase、sp 和wp
5.2.1 第一板斧—初識影子物件
5.2.2 第二板斧—由弱生強
5.2.3 第三板斧—破解生死魔咒
5.2.4 輕量級的引用計數控制類別LightRefBase
5.2.5 題外話—三板斧的來歷
5.3 Thread 類別及常用同步類別分析
5.3.1 一個變數引發的思考
5.3.2 常用同步類別
5.4 Looper 和Handler 類別分析
5.4.1 Looper 類別分析
5.4.2 Handler 分析
5.4.3 Looper 和Handler 的同步關係
5.4.4 HandlerThread 介紹
5.5 本章小結
Chapter 6 深入理解Binder
6.1 概述
6.2 庖丁解MediaServer
6.2.1 MediaServer 的入口函數
6.2.2 獨一無二的ProcessState
6.2.3 時空穿越魔術—defaultServiceManager
6.2.4 註冊MediaPlayerService
6.2.5 秋風掃落葉—StartThread Pool 和join Thread Pool 分析
6.2.6 你徹底明白了嗎
6.3 服務總管ServiceManager
6.3.1 ServiceManager 的原理
6.3.2 服務的註冊
6.3.3 ServiceManager 存在的意義
6.4 MediaPlayerService 和它的Client
6.4.1 查詢ServiceManager
6.4.2 子承父業
6.5 延伸思考
6.5.1 Binder 和線程的關係
6.5.2 有人情味的訃告
6.5.3 匿名Service
6.6 學以致用
6.6.1 純Native 的Service
6.6.2 扶得起的" 阿斗"(aidl)
6.7 本章小結
Chapter 7 深入理解Audio 系統
7.1 概述
7.2 AudioTrack 的破解
7.2.1 用例介紹
7.2.2 AudioTrack(Java 空間)分析
7.2.3 AudioTrack(Native 空間)分析
7.2.4 關於AudioTrack 的總結
7.3 AudioFlinger 的破解
7.3.1 AudioFlinger 的誕生
7.3.2 透過流程分析AudioFlinger
7.3.3 audio_track_cblk_t 分析
7.3.4 關於AudioFlinger 的總結
7.4 AudioPolicyService 的破解
7.4.1 AudioPolicyService 的新增
7.4.2 重回AudioTrack
7.4.3 聲音路由切換實體分析
7.4.4 關於AudioPolicy 的總結
7.5 延伸思考
7.5.1 DuplicatingThread 破解
7.5.2 題外話
7.6 本章小結
Chapter 8 深入理解Surface 系統
8.1 概述
8.2 一個Activity 的顯示
8.2.1 Activity 的新增
8.2.2 Activity 的UI 繪製
8.2.3 關於Activity 的總結
8.3 初識Surface
8.3.1 和Surface 有關的流程總結
8.3.2 Surface 之乾坤大挪移
8.3.3 乾坤大挪移的JNI 層分析
8.3.4 Surface 和繪圖
8.3.5 初識Surface 小結
8.4 深入分析Surface
8.4.1 與Surface 相關的基礎知識介紹
8.4.2 SurfaceComposerClient 分析
8.4.3 SurfaceControl 分析
8.4.4 writeToParcel 和Surface 物件的新增
8.4.5 lockCanvas 和unlockCanvasAndPost 分析
8.4.6 GraphicBuffer 介紹
8.4.7 深入分析Surface 的總結
8.5 SurfaceFlinger 分析
8.5.1 SurfaceFlinger 的誕生
8.5.2 SF 工作線程分析
8.5.3 Transaction 分析
8.5.4 關於SurfaceFlinger 的總結
8.6 延伸思考
8.6.1 Surface 系統的CB 物件分析
8.6.2 ViewRoot 的你問我答
8.6.3 LayerBuffer 分析
8.7 本章小結
Chapter 9 深入理解Vold 和Rild
9.1 概述
9.2 Vold 的原理與機制分析
9.2.1 Netlink 和Uevent 介紹
9.2.2 初識Vold
9.2.3 NetlinkManager 模組分析
9.2.4 VolumeManager 模組分析
9.2.5 CommandListener 模組分析
9.2.6 Vold 實體分析
9.2.7 關於Vold 的總結
9.3 Rild 的原理與機制分析
9.3.1 初識Rild
9.3.2 RIL_startEventLoop 分析
9.3.3 RIL_Init 分析
9.3.4 RIL_register 分析
9.3.5 關於Rild main 函數的總結
9.3.6 Rild 實體分析
9.3.7 關於Rild 的總結
9.4 延伸思考
9.4.1 嵌入式系統的儲存知識介紹
9.4.2 Rild 和Phone 的改進探討
9.5 本章小結
Chapter 10 深入理解MediaScanner
10.1 概述
10.2 android
10.2.1 MSR 模組分析
10.2.2 MSS 模組分析
10.2.3 android 流程總結 .
10.3 MediaScanner 分析
10.3.1 Java 層分析
10.3.2 JNI 層分析
10.3.3 PVMediaScanner 分析
10.3.4 關於MediaScanner 的總結
10.4 延伸思考
10.4.1 MediaScannerConnection 介紹
10.4.2 我問你答
10.5 本章小結