說 明
1.本書涉及C、C++和Java語言,閱讀本書最好會這三種編程語言,同時本書還會涉及少量Linux,如果懂Linux更佳。
2.本書使用兩種格式來對代碼進行解釋。
第一種,舉例如下。
class Condition {
public:
enum {
PRIVATE = 0,
SHARED = 1
};
//定義兩種枚舉類型:PRIVATE表示本進程內部使用,SHARED表示用于跨進程共
//享,如果使用Condition時沒有指定具體類型,則默認是PRIVATE類型。
……
}
這種方式是在代碼段內部解釋代碼,原因是有些類和方法比較復雜,代碼非常長,貼完代碼之后,可能已經幾頁紙了,如果這時候在代碼段的最后面去解釋代碼,讀者還需要往前翻看需要解釋的代碼,十分不便。
第二種,舉例如下。
public final boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}
代碼解釋:這里的sendMessage() 方法會調用sendMessageDelayed() 方法,參數msg是具體的Message,而參數0表示這個消息不要延時處理。
由于這種方式的代碼量比較少,可以邊看代碼邊看解釋,不用翻頁,所以采用這種方式比較方便。
3.本書是基于Android源代碼和實際開發案例分析的,所以閱讀本書一定要結合源代碼。
4.大家都知道代碼塊在Java里叫方法,在C里叫函數,筆者盡量在C、C++中使用“函數”這個叫法,在Java中使用“方法”這個叫法,但也有可能出現混淆。
5.本書使用了Visio、Edraw和StarUML這3個工具來畫圖,由于排版的問題,圖也許會有不清楚的地方,如果發現這類問題,請發郵件至813126419@qq.com,我會盡快回復。
6.本書是我個人對Android的理解,難免會有錯誤,懇請大家指正。
何軍,2010年從事Android工作至今,從Android1.6到現在的Android7.0,熱愛Android、喜歡鉆研、樂于分享。多年的框架開發和應用開發經驗,應用商店有多個APP上線作品。熱衷于Android源代碼的研究,對Android的架構設計和實現原理有深刻的認識和理解。目前就職于某一手機廠商,任職Android Framework框架工程師,負責Framework與APP開發和維護。
第一部分 Android基礎篇
第1章 Android簡介 2
1.1 Android簡介 2
1.2 閱讀Android源代碼 6
第2章 Android基礎類 10
2.1 Android基礎類簡介 10
2.2 Thread類原理 11
2.3 Mutex與Condition 20
2.3.1 Mutex(AutoMutex)分析 20
2.3.2 Condition代碼分析 24
2.4 Android系統智能指針 30
2.4.1 輕量級指針(lp) 30
2.4.2 強指針(sp) 32
第3章 Android上下文環境Context 37
3.1 Context簡介 37
3.2 Application運行上下文環境Context的創建過程 40
3.2.1 創建Application Context 41
3.2.2 獲得Application Context 47
3.3 Activity運行上下文環境Context的創建過程 48
3.4 Service運行上下文環境Context的創建過程 55
第4章 Android消息機制 59
4.1 Android消息機制原理 59
4.2 創建消息隊列和進入消息循環過程 61
4.3 消息的發送過程 70
4.4 消息的處理過程 75
第二部分 Android框架篇
第5章 Android Init進程 78
5.1 Android Init進程簡介 78
5.2 klog_init() 函數 83
5.3 process_kernel_cmdline() 函數 85
5.4 signal_handler_init() 函數 86
5.5 property_load_boot_defaults() 函數 89
5.6 屬性服務 90
5.6.1 屬性服務的初始化與啟動 90
5.6.2 屬性的設置 91
5.6.3 屬性值的獲取 95
5.7 解析init.rc配置文件和啟動service進程 96
5.7.1 init.rc文件基礎介紹 96
5.7.2 解析init.rc文件 100
5.7.3 啟動service進程 104
第6章 開機動畫bootanimation 108
6.1 開機動畫bootanimation原理 108
6.2 開機動畫bootanimation的顯示過程 111
6.3 開機動畫bootanimation的退出過程 127
第7章 Zygote進程 135
7.1 Zygote進程基礎介紹 135
7.2 Zygote進程的啟動 139
7.2.1 調用startVM() 函數啟動虛擬機 143
7.2.2 調用startReg() 函數注冊JNI方法 143
7.2.3 調用ZygoteInit類的main() 方法 145
7.3 啟動system_server進程 150
7.4 啟動APP應用程序進程 155
第8章 SystemServer進程 161
8.1 SystemServer系統服務 161
8.2 SystemServer創建框架核心服務 165
第9章 Android系統的開機與關機 175
9.1 Android系統的開機 175
9.2 Android系統的關機 185
9.3 案例分析 197
9.3.1 Android系統開機時間標志 197
9.3.2 Android系統關機時間標志 198
第10章 Android系統異常問題 199
10.1 addr2line工具 199
10.2 Android Watchdog 207
10.3 Android系統異常問題 217
10.3.1 Android死機 218
10.3.2 Android系統重啟 220
10.3.3 Android系統啟動異常 233
第11章 ActivityManagerService 236
11.1 ActivityManagerService簡介 236
11.2 Activity的啟動過程 240
11.2.1 Launcher Activity的onPause() 過程 241
11.2.2 Launcher Activity的onStop() 過程 261
11.2.3 新Activity的onCreate()、onStart()和onResume() 過程 264
11.3 Service的啟動過程 273
11.4 Broadcast 280
11.4.1 廣播的注冊過程 282
11.4.2 廣播的發送過程 290
11.4.3 廣播的處理過程 295
11.5 進程內存管理 303
11.6 案例分析 320
11.6.1 與Activity有關的例子 320
11.6.2 與BroadCast有關的例子 323
11.6.3 與進程內存有關的例子 329
第12章 Android國際化 331
12.1 CTS與GTS 331
12.2 全球緊急電話策略 337
12.3 Android多語言 345
第三部分 Android ROM UI篇
第13章 Android資源管理系統 354
13.1 資源管理簡介 354
13.2 資源初始化過程 361
13.2.1 AssetManager的構造方法 369
13.2.2 AssetManager.java的addAssetPath() 方法 374
13.2.3 Resources的構造方法 375
13.3 資源查找、解析、創建View過程 378
13.3.1 查找資源ID對應的不是文件的過程 380
13.3.2 查找資源ID對應的是文件的過程 382
13.4 主題換膚實現 396
第14章 Android View系統 411
14.1 View系統簡介 411
14.2 應用程序Activity的創建 412
14.3 Activity窗口對象PhoneWindow的創建 424
14.4 Activity根視圖對象DecorView的創建 432
14.5 ViewRootImpl的創建和添加DecorView對象 440
14.6 View的measure、layout和draw過程 453
14.6.1 View的measure過程 462
14.6.2 View的layout過程 473
14.6.3 View的draw過程 478
14.7 View事件分發 493
14.8 案例分析 503
第15章 Android控件 512
15.1 Android系統控件分析 512
15.1.1 系統控件簡介 512
15.1.2 系統控件TextView的屬性 514
15.1.3 系統控件TextView的onMeasure() 517
15.1.4 系統控件TextView的onLayout() 523
15.1.5 系統控件TextView的onDraw() 523
15.2 自定義控件 524
15.2.1 定義自定義控件屬性 525
15.2.2 實現自定義控件 525
15.2.3 使用自定義控件 527
15.3 Android控件案例分析 527