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