深入理解Android 卷III

深入理解Android 卷III

《深入理解Android 卷III》是2015年機械工業出版社出版的圖書,作者是張大偉。

基本介紹

  • 中文名:深入理解Android 卷III
  • 作者:張大偉
  • 出版社:機械工業出版社
  • ISBN:9787111507369
內容簡介,圖書目錄,作者簡介,

內容簡介

《深入理解Android(卷3)》是Android經典暢銷書系“深入理解Android”系列Framework卷的第III卷,從原始碼的角度,對Android系統的Audio和UI兩大功能的相關模組的實現原理和工作機製做了系統且詳細的分析,填補了市場的空白。
  《深入理解Android(卷3)》在邏輯上分為4個部分:
  Part 01(第1~2章):這是本書的基礎部分,首先介紹了Android源碼環境的搭建、編譯和調試;然後講解了Android進程間通信與任務調度的工具Binder與MessageQueue。這兩項基礎工作是深入研究Android前必須做的功課。
  Part 02(第3章):詳細分析了AudioService服務的實現,包括音量管理、音頻外設管理、AudioFocus機制的實現等內容。
  Part 03(第4~6章):這是本書的核心內容之一,詳細分析了Android UI的通用實現,依次剖析了WindowManagerService、Android輸入系統、Android控制項系統的工作原理。
  Part 04(第7~8章):主要分析了SystemUI和Android壁紙相關服務的實現,包括StatusBarManagerService與NotificationManagerService兩個系統服務,以及WallpaperManagerService系統服務、動態壁紙與靜態壁紙的工作原理等內容。
  除此之外,在對海量的Android原始碼進行分析的過程中,本書儘可能地對其中的精妙之處進行了分析和解讀,目的是希望幫助讀者領悟其中的優秀設計思想和方法。

圖書目錄

推薦序
前 言
第1章 開發環境部署1
1.1獲取Android原始碼1
1.2Android的編譯3
1.3在IDE中導入Android原始碼4
1.3.1將Android原始碼導入Eclipse4
1.3.2將Android原始碼導入SourceInsight5
1.4調試Android原始碼6
1.4.1使用Eclipse調試Android Java原始碼6
1.4.2使用gdb調試Android C/C++原始碼8
1.5本章小結9
第2章深入理解Java Binder和MessageQueue10
2.1概述11
2.2Java層中的Binder分析11
2.2.1Binder架構總覽11
2.2.2初始化Java層Binder框架13
2.2.3窺一斑,可見全豹乎16
2.2.4理解AIDL25
2.2.5Java層Binder架構總結28
2.3心繫兩界的MessageQueue28
2.3.1MessageQueue的創建29
2.3.2提取訊息29
2.3.3nativePollOnce函式分析32
2.3.4MessageQueue總結42
2.4本章小結44
第3章 深入理解AudioService45
3.1概述46
3.2音量管理47
3.2.1音量鍵的處理流程47
3.2.2通用的音量設定函式setStreamVolume( )61
3.2.3靜音控制63
3.2.4音量控制小結67
3.3音頻外設的管理68
3.3.1 WiredAccessoryObserver 設備狀態的監控68
3.3.2AudioService的外設狀態管理73
3.3.3音頻外設管理小結78
3.4AudioFocus機制的實現78
3.4.1AudioFocus最簡單的例子79
3.4.2AudioFocus實現原理簡介81
3.4.3申請AudioFocus82
3.4.4釋放AudioFocus86
3.4.5AudioFocus小結87
3.5AudioService的其他功能88
3.6本章小結89
第4章 深入理解WindowManager-Service90
4.1初識WindowManagerService91
4.1.1一個從命令行啟動的動畫視窗91
4.1.2WMS的構成99
4.1.3初識WMS的小結103
4.2WMS的視窗管理結構104
4.2.1理解WindowToken107
4.2.2理解WindowState111
4.2.3理解DisplayContent112
4.3理解視窗的顯示次序112
4.3.1主序、子序和視窗類型112
4.3.2通過主序與子序確定視窗的次序114
4.3.3更新顯示次序到Surface119
4.3.4關於顯示次序的小結119
4.4視窗的布局119
4.4.1從relayoutWindow( )開始120
4.4.2布局操作的外圍代碼分析124
4.4.3初探performLayoutAndPlace-SurfacesLockedInner( )127
4.4.4布局的前期處理128
4.4.5布局DisplayContent130
4.4.6布局的最終階段150
4.5WMS的動畫系統150
4.5.1Android動畫原理簡介151
4.5.2WMS的動畫系統框架155
4.5.3WindowAnimator分析156
4.5.4深入理解視窗動畫160
4.5.5交替運行的布局系統與動畫系統173
4.5.6動畫系統總結174
4.6本章小結174
第5章 深入理解Android輸入系統176
5.1初識Android輸入系統177
5.1.1getevent與sendevent工具178
5.1.2Android輸入系統簡介179
5.1.3IMS的構成181
5.2原始事件的讀取與加工185
5.2.1基礎知識:INotify與Epoll186
5.2.2 InputReader的總體流程189
5.2.3 深入理解EventHub191
5.2.4 深入理解InputReader205
5.2.5原始事件的讀取與加工總結225
5.3輸入事件的派發225
5.3.1通用事件派發流程226
5.3.2按鍵事件的派發237
5.3.3DispatcherPolicy與InputFilter247
5.3.4輸入事件的派發總結250
5.4輸入事件的傳送、接收與反饋250
5.4.1深入理解InputChannel251
5.4.2連線InputDispatcher和視窗252
5.4.3事件的傳送260
5.4.4事件的接收263
5.4.5事件的反饋與傳送循環264
5.4.6輸入事件的傳送、接收與反饋總結267
5.5關於輸入系統的其他重要話題267
5.5.1輸入事件ANR的產生267
5.5.2 焦點視窗的確定270
5.5.3以軟體方式模擬用戶操作273
5.6本章小結273
第6章 深入理解控制項系統275
6.1 初識Android的控制項系統276
6.1.1 另一種創建視窗的方法277
6.1.2 控制項系統的組成278
6.2 深入理解WindowManager279
6.2.1 WindowManager的創建與體系結構279
6.2.2 通過WindowManagerGlobal添加視窗282
6.2.3 更新視窗的布局284
6.2.4 刪除視窗285
6.2.5 WindowManager的總結285
6.3 深入理解ViewRootImpl286
6.3.1 ViewRootImpl的創建及其重要的成員286
6.3.2 控制項系統的心跳:performTraversals( )290
6.3.3 ViewRootImpl總結317
6.4 深入理解控制項樹的繪製317
6.4.1 理解Canvas317
6.4.2 View.invalidate( )與髒區域320
6.4.3 開始繪製321
6.4.4 軟體繪製的原理323
6.4.5 硬體加速繪製的原理334
6.4.6 使用繪圖快取346
6.4.7 控制項動畫356
6.4.8 繪製控制項樹的總結360
6.5 深入理解輸入事件的派發361
6.5.1 觸摸模式361
6.5.2 控制項焦點363
6.5.3 輸入事件派發的綜述376
6.5.4 按鍵事件的派發381
6.5.5 觸摸事件的派發388
6.5.6 輸入事件派發的總結404
6.6 Activity與控制項系統405
6.6.1 理解PhoneWindow405
6.6.2 Activity視窗的創建與顯示414
6.7 本章小結416
第7章 深入理解SystemUI418
7.1 初識SystemUI419
7.1.1 SystemUIService的啟動420
7.1.2 狀態欄與導航欄的創建422
7.1.3 理解IStatusBarService425
7.1.4 SystemUI的體系結構427
7.2 深入理解狀態欄428
7.2.1 狀態欄視窗的創建與控制項樹結構429
7.2.2 通知信息的管理與顯示434
7.2.3 系統狀態圖示區的管理與顯示448
7.2.4 狀態欄總結452
7.3 深入理解導航欄452
7.3.1 導航欄的創建453
7.3.2 虛擬按鍵的工作原理459
7.3.3 SearchPanel462
7.3.4 關於導航欄的其他話題465
7.3.5 導航欄總結471
7.4 禁用狀態欄與導航欄的功能472
7.4.1 如何禁用狀態欄與導航欄的功能472
7.4.2 StatusBarManagerService對禁用標記的維護473
7.4.3 狀態欄與導航欄對禁用標記的回響474
7.5 理解SystemUIVisibility475
7.5.1 SystemUIVisibility在系統中的漫遊過程476
7.5.2 SystemUIVisibility發揮作用482
7.5.3 SystemUIVisibility總結494
7.6 本章小結495
第8章 深入理解Android壁紙496
8.1 初識Android壁紙497
8.2深入理解動態壁紙498
8.2.1啟動動態壁紙的方法498
8.2.2壁紙服務的啟動原理498
8.2.3 理解UpdateSurface( )方法510
8.2.4 壁紙的銷毀515
8.2.5 理解Engine的回調516
8.3 深入理解靜態壁紙—ImageWallpaper519
8.3.1 獲取用作靜態壁紙的點陣圖519
8.3.2 靜態壁紙點陣圖的設定522
8.3.3 連線靜態壁紙的設定與獲取—WallpaperObserver524
8.4 WMS對壁紙視窗的特殊處理526
8.4.1 壁紙視窗Z序的確定527
8.4.2 壁紙視窗的可見性533
8.4.3 壁紙視窗的動畫535
8.4.4 壁紙視窗總結538
8.5 本章小結539

作者簡介

 張大偉,資深Android系統開發工程師,現就職於索尼移動。從2011年開始從事Android開發,專注於Android系統原始碼的研究、定製與維護工作,對Android的架構設計與運行原理有著深入的認識與實踐經驗,其中對UI相關模組、多媒體系統尤為擅長。曾主持了Android多視窗、多任務以及單手操作等系統定製的開發工作。此外對於其他開發平台如.NET亦有相當的經驗。

熱門詞條

聯絡我們