知識(shí)點(diǎn)都是Android應(yīng)用開(kāi)發(fā)者和系統(tǒng)開(kāi)發(fā)者需要重點(diǎn)掌握的。
全書(shū)共10章,第1章介紹了閱讀本書(shū)所需要做的準(zhǔn)備工作,主要包括對(duì)Android系統(tǒng)架構(gòu)和源碼閱讀方法的介紹;
第2章通過(guò)對(duì)Android系統(tǒng)中的MediaScanner進(jìn)行分析,詳細(xì)講解了Android中十分重要的JNI技術(shù);
第3章分析了init進(jìn)程,揭示了通過(guò)解析init.rc來(lái)啟動(dòng)Zygote以及屬性服務(wù)的工作原理;
第4章分析了Zygote、SystemServer等進(jìn)程的工作機(jī)制,同時(shí)還討論了Android的啟動(dòng)速度、虛擬機(jī)HeapSize的大小調(diào)整、Watchdog工作原理等問(wèn)題;
第5章講解了Android系統(tǒng)中常用的類(lèi),包括sp、wp、RefBase、Thread等類(lèi),同步類(lèi),以及Java中的Handler類(lèi)和Looper類(lèi),掌握這些類(lèi)的知識(shí)后方能在后續(xù)的代碼分析中做到游刃有余;
第6章以MediaServer為切入點(diǎn),對(duì)Android中極為重要的Binder進(jìn)行了較為全面的分析,深刻揭示了其本質(zhì)。
第7章對(duì)Audio系統(tǒng)進(jìn)行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。
第8章深入講解了Surface系統(tǒng)的實(shí)現(xiàn)原理,分析了Surface與Activity之間以及Surface與SurfaceFlinger之間的關(guān)系、SurfaceFlinger的工作原理、Surface系統(tǒng)中的幀數(shù)據(jù)傳輸以及LayerBuffer的工作流程。
第9章對(duì)Vold和Rild的原理和機(jī)制進(jìn)行了深入的分析,同時(shí)還探討了Phone設(shè)計(jì)優(yōu)化的問(wèn)題;
第10章分析了多媒體系統(tǒng)中MediaScanner的工作原理。
目錄
第1章 閱讀前的準(zhǔn)備工作 / 1
1.1 系統(tǒng)架構(gòu) / 2
1.1.1 Android系統(tǒng)架構(gòu) / 2
1.1.2 本書(shū)的架構(gòu) / 3
1.2 搭建開(kāi)發(fā)環(huán)境 / 4
1.2.1 下載源碼 / 4
1.2.2 編譯源碼 / 6
1.3 工具介紹 / 8
1.3.1 Source Insight介紹 / 8
1.3.3 Busybox的使用 / 11
1.4 本章小結(jié) / 12
第2章 深入理解JNI / 13
2.1 JNI概述 / 14
2.2 學(xué)習(xí)JNI的實(shí)例:MediaScanner / 15
2.3 Java層的MediaScanner分析 / 16
2.3.1 加載JNI庫(kù) / 16
2.3.2 Java的native函數(shù)和總結(jié) / 17
2.4 JNI層MediaScanner的分析 / 17
2.4.1 注冊(cè)JNI函數(shù) / 18
2.4.2 數(shù)據(jù)類(lèi)型轉(zhuǎn)換 / 22
2.4.3 JNIEnv介紹 / 24
2.4.4 通過(guò)JNIEnv操作jobject / 25
2.4.5 jstring介紹 / 27
2.4.6 JNI類(lèi)型簽名介紹 / 28
2.4.7 垃圾回收 / 29
2.4.8 JNI中的異常處理 / 32
2.5 本章小結(jié) / 32
第3章 深入理解init / 33
3.1 概述 / 34
3.2 init分析 / 34
3.2.1 解析配置文件 / 38
3.2.2 解析service / 42
3.2.3 init控制service / 48
3.2.4 屬性服務(wù) / 52
3.3 本章小結(jié) / 60
第4章 深入理解zygote / 61
4.1 概述 / 62
4.2 zygote分析 / 62
4.2.1 AppRuntime分析 / 63
4.2.2 Welcome to Java World / 68
4.2.3 關(guān)于zygote的總結(jié) / 74
4.3 SystemServer分析 / 74
4.3.1 SystemServer的誕生 / 74
4.3.2 SystemServer的重要使命 / 77
4.3.3 關(guān)于 SystemServer的總結(jié) / 83
4.4 zygote的分裂 / 84
4.4.1 ActivityManagerService發(fā)送請(qǐng)求 / 84
4.4.2 有求必應(yīng)之響應(yīng)請(qǐng)求 / 86
4.4.3 關(guān)于zygote分裂的總結(jié) / 88
4.5 拓展思考 / 88
4.5.1 虛擬機(jī)heapsize的限制 / 88
4.5.2 開(kāi)機(jī)速度優(yōu)化 / 89
4.5.3 Watchdog分析 / 90
4.6 本章小結(jié) / 93
第5章 深入理解常見(jiàn)類(lèi) / 95
5.1 概述 / 96
5.2 以“三板斧”揭秘RefBase、sp和wp / 96
5.2.1 第一板斧——初識(shí)影子對(duì)象 / 96
5.2.2 第二板斧——由弱生強(qiáng) / 103
5.2.3 第三板斧——破解生死魔咒 / 106
5.2.4 輕量級(jí)的引用計(jì)數(shù)控制類(lèi)LightRefBase / 108
5.2.5 題外話(huà)—三板斧的來(lái)歷 / 109
5.3 Thread類(lèi)及常用同步類(lèi)分析 / 109
5.3.1 一個(gè)變量引發(fā)的思考 / 109
5.3.2 常用同步類(lèi) / 114
5.4 Looper和Handler類(lèi)分析 / 121
5.4.1 Looper類(lèi)分析 / 122
5.4.2 Handler分析 / 124
5.4.3 Looper和Handler的同步關(guān)系 / 127
5.4.4 HandlerThread介紹 / 129
5.5 本章小結(jié) / 129
第6章 深入理解Binder / 130
6.1 概述 / 131
6.2 庖丁解MediaServer / 132
6.2.1 MediaServer的入口函數(shù) / 132
6.2.2 獨(dú)一無(wú)二的ProcessState / 133
6.2.3 時(shí)空穿越魔術(shù)—defaultServiceManager / 134
6.2.4 注冊(cè)MediaPlayerService / 142
6.2.5 秋風(fēng)掃落葉—StartThread Pool和join Thread Pool分析 / 149
6.2.6 你徹底明白了嗎 / 152
6.3 服務(wù)總管ServiceManager / 152
6.3.1 ServiceManager的原理 / 152
6.3.2 服務(wù)的注冊(cè) / 155
6.3.3 ServiceManager存在的意義 / 158
6.4 MediaPlayerService和它的Client / 158
6.4.1 查詢(xún)ServiceManager / 158
6.4.2 子承父業(yè) / 159
6.5 拓展思考 / 162
6.5.1 Binder和線程的關(guān)系 / 162
6.5.2 有人情味的訃告 / 163
6.5.3 匿名Service / 165
6.6 學(xué)以致用 / 166
6.6.1 純Native的Service / 166
6.6.2 扶得起的“阿斗”(aidl) / 169
6.7 本章小結(jié) / 172
第7章 深入理解Audio系統(tǒng) / 173
7.1 概述 / 174
7.2 AudioTrack的破解 / 174
7.2.1 用例介紹 / 174
7.2.2 AudioTrack(Java空間)分析 / 179
7.2.3 AudioTrack(Native空間)分析 / 188
7.2.4 關(guān)于AudioTrack的總結(jié) / 200
7.3 AudioFlinger的破解 / 200
7.3.1 AudioFlinger的誕生 / 200
7.3.2 通過(guò)流程分析AudioFlinger / 204
7.3.3 audio_track_cblk_t分析 / 230
7.3.4 關(guān)于AudioFlinger的總結(jié) / 234
7.4 AudioPolicyService的破解 / 234
7.4.1 AudioPolicyService的創(chuàng)建 / 235
7.4.2 重回AudioTrack / 245
7.4.3 聲音路由切換實(shí)例分析 / 251
7.4.4 關(guān)于AudioPolicy的總結(jié) / 262
7.5 拓展思考 / 262
7.5.1 DuplicatingThread破解 / 262
7.5.2 題外話(huà) / 270
7.6 本章小結(jié) / 272
第8章 深入理解Surface系統(tǒng) / 273
8.1 概述 / 275
8.2 一個(gè)Activity的顯示 / 275
8.2.1 Activity的創(chuàng)建 / 275
8.2.2 Activity的UI繪制 / 294
8.2.3 關(guān)于Activity的總結(jié) / 296
8.3 初識(shí)Surface / 297
8.3.1 和Surface有關(guān)的流程總結(jié) / 297
8.3.2 Surface之乾坤大挪移 / 298
8.3.3 乾坤大挪移的JNI層分析 / 303
8.3.4 Surface和畫(huà)圖 / 307
8.3.5 初識(shí)Surface小結(jié) / 309
8.4 深入分析Surface / 310
8.4.1 與Surface相關(guān)的基礎(chǔ)知識(shí)介紹 / 310
8.4.2 SurfaceComposerClient分析 / 315
8.4.3 SurfaceControl分析 / 320
8.4.4 writeToParcel和Surface對(duì)象的創(chuàng)建 / 331
8.4.5 lockCanvas和unlockCanvasAndPost分析 / 335
8.4.6 GraphicBuffer介紹 / 344
8.4.7 深 入分析Surface的總結(jié) / 353
8.5 SurfaceFlinger分析 / 353
8.5.1 SurfaceFlinger的誕生 / 354
8.5.2 SF工作線程分析 / 359
8.5.3 Transaction分析 / 368
8.5.4 關(guān)于SurfaceFlinger的總結(jié) / 376
8.6 拓展思考 / 377
8.6.1 Surface系統(tǒng)的CB對(duì)象分析 / 377
8.6.2 ViewRoot的你問(wèn)我答 / 384
8.6.3 LayerBuffer分析 / 385
8.7 本章小結(jié) / 394
第9章 深入理解Vold和Rild / 395
9.1 概述 / 396
9.2 Vold的原理與機(jī)制分析 / 396
9.2.1 Netlink和Uevent介紹 / 397
9.2.2 初識(shí)Vold / 399
9.2.3 NetlinkManager模塊分析 / 400
9.2.4 VolumeManager模塊分析 / 408
9.2.5 CommandListener模塊分析 / 414
9.2.6 Vold實(shí)例分析 / 417
9.2.7 關(guān)于Vold的總結(jié) / 428
9.3 Rild的原理與機(jī)制分析 / 428
9.3.1 初識(shí)Rild / 430
9.3.2 RIL_startEventLoop分析 / 432
9.3.3 RIL_Init分析 / 437
9.3.4 RIL_register分析 / 444
9.3.5 關(guān)于Rild main函數(shù)的總結(jié) / 447
9.3.6 Rild實(shí)例分析 / 447
9.3.7 關(guān)于Rild的總結(jié) / 459
9.4 拓展思考 / 459
9.4.1 嵌入式系統(tǒng)的存儲(chǔ)知識(shí)介紹 / 459
9.4.2 Rild和Phone的改進(jìn)探討 / 462
9.5 本章小結(jié) / 463
第10章 深入理解MediaScanner / 464
10.1 概述 / 465
10.2 android.process.media分析 / 465
10.2.1 MSR模塊分析 / 466
10.2.2 MSS模塊分析 / 467
10.2.3 android.process.media媒體掃描工作的流程總結(jié) / 471
10.3 MediaScanner分析 / 472
10.3.1 Java層分析 / 472
10.3.2 JNI層分析 / 476
10.3.3 PVMediaScanner分析 / 479
10.3.4 關(guān)于MediaScanner的總結(jié) / 485
10.4 拓展思考 / 486
10.4.1 MediaScannerConnection介紹 / 486
10.4.2 我問(wèn)你答 / 487
10.5 本章小結(jié) / 488