深入理解android:卷1

內容簡介
  《深入理解android:卷1》是一本以情景方式對android的源代碼進行深入分析的書。內容廣泛,以對framework層的分析爲主,兼顧native層和application層;分析深入,每一部分源代碼的分析都力求透徹;針對性強,注重實際應用開發需求,書中所涵蓋的知識點都是android應用開發者和系統開發者需要重點掌握的。
  全書共10章,第1章介紹了閱讀本書所需要做的準備工作,主要包括對android系統架構和源碼閱讀方法的介紹;第2章通過對android系統中的mediascanner進行分析,詳細講解了android中十分重要的jni技術;第3章分析了init進程,揭示了通過解析init.rc來啓動zygote以及屬性服務的工作原理;第4章分析了zygote、systemserver等進程的工作機制,同時還討論了android的啓動速度、虛擬機heapsize的大小調整、watchdog工作原理等問題;第5章講解了android系統中常用的類,包括sp、wp、refbase、thread等類,同步類,以及java中的handler類和looper類,掌握這些類的知識後方能在後續的代碼分析中做到遊刃有餘;第6章以mediaserver爲切入點,對android中極爲重要的binder進行了較爲全面的分析,深刻揭示了其本質。第7章對audio系統進行了深入的分析,尤其是audiotrack、audioflinger和audiopolicyservice等的工作原理。第8章深入講解了surface系統的實現原理,分析了surface與activity之間以及surface與surfaceflinger之間的關係、surfaceflinger的工作原理、surface系統中的幀數據傳輸以及layerbuffer的工作流程。第9章對vold和rild的原理和機制進行了深入的分析,同時還探討了phone設計優化的問題;第10章分析了多媒體系統中mediascanner的工作原理。
  本書適合有一定基礎的android應用開發工程師和系統工程師閱讀。通過對本書的學習,大家將能更深刻地理解android系統,從而自如應對實際開發中遇到的難題。

目錄
《深入理解android:卷1》
第1章 閱讀前的準備工作 / 1
1.1 系統架構 / 2
1.1.1 android系統架構 / 2
1.1.2 本書的架構 / 3
1.2 搭建開發環境 / 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 本章小結 / 12
第2章 深入理解jni / 13
2.1 jni概述 / 14
2.2 學習jni的實例:mediascanner / 15
2.3 java層的mediascanner分析 / 16
2.3.1 加載jni庫 / 16
2.3.2 java的native函數和總結 / 17
2.4 jni層mediascanner的分析 / 17
2.4.1 註冊jni函數 / 18

.2.4.2 數據類型轉換 / 22
2.4.3 jnienv介紹 / 24
2.4.4 通過jnienv操作jobject / 25
2.4.5 jstring介紹 / 27
2.4.6 jni類型簽名介紹 / 28
2.4.7 垃圾回收 / 29
2.4.8 jni中的異常處理 / 32
2.5 本章小結 / 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 屬性服務 / 52
3.3 本章小結 / 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 關於zygote的總結 / 74
4.3 systemserver分析 / 74
4.3.1 systemserver的誕生 / 74
4.3.2 systemserver的重要使命 / 77
4.3.3 關於 systemserver的總結 / 83
4.4 zygote的分裂 / 84
4.4.1 activitymanagerservice發送請求 / 84
4.4.2 有求必應之響應請求 / 86
4.4.3  關於zygote分裂的總結 / 88
4.5 拓展思考 / 88
4.5.1 虛擬機heapsize的限制 / 88
4.5.2 開機速度優化 / 89
4.5.3 watchdog分析 / 90
4.6 本章小結 / 93
第5章 深入理解常見類 / 95
5.1 概述 / 96
5.2 以“三板斧”揭祕refbase、sp和wp / 96
5.2.1 第一板斧——初識影子對象 / 96
5.2.2 第二板斧——由弱生強 / 103
5.2.3 第三板斧——破解生死魔咒 / 106
5.2.4 輕量級的引用計數控制類lightrefbase / 108
5.2.5 題外話—三板斧的來歷 / 109
5.3 thread類及常用同步類分析 / 109
5.3.1 一個變量引發的思考 / 109
5.3.2 常用同步類 / 114
5.4 looper和handler類分析 / 121
5.4.1 looper類分析 / 122
5.4.2 handler分析 / 124
5.4.3 looper和handler的同步關係 / 127
5.4.4 handlerthread介紹 / 129
5.5 本章小結 / 129
第6章 深入理解binder / 130
6.1 概述 / 131
6.2 庖丁解mediaserver / 132
6.2.1 mediaserver的入口函數 / 132
6.2.2 獨一無二的processstate / 133
6.2.3 時空穿越魔術—defaultservicemanager / 134
6.2.4 註冊mediaplayerservice / 142
6.2.5 秋風掃落葉—startthread pool和join thread pool分析 /149
6.2.6 你徹底明白了嗎 / 152
6.3 服務總管servicemanager / 152
6.3.1 servicemanager的原理 / 152
6.3.2 服務的註冊 / 155
6.3.3 servicemanager存在的意義 / 158
6.4 mediaplayerservice和它的client / 158
6.4.1 查詢servicemanager / 158
6.4.2 子承父業 / 159
6.5 拓展思考 / 162
6.5.1 binder和線程的關係 / 162
6.5.2 有人情味的訃告 / 163
6.5.3 匿名service / 165
6.6 學以致用 / 166
6.6.1 純native的service / 166
6.6.2 扶得起的“阿斗”(aidl) / 169
6.7 本章小結 / 172
第7章 深入理解audio系統 / 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 關於audiotrack的總結 / 200
7.3 audioflinger的破解 / 200
7.3.1 audioflinger的誕生 / 200
7.3.2 通過流程分析audioflinger / 204
7.3.3 audio_track_cblk_t分析 / 230
7.3.4 關於audioflinger的總結 / 234
7.4 audiopolicyservice的破解 / 234
7.4.1 audiopolicyservice的創建 / 235
7.4.2 重回audiotrack / 245
7.4.3 聲音路由切換實例分析 / 251
7.4.4 關於audiopolicy的總結 / 262
7.5 拓展思考 / 262
7.5.1 duplicatingthread破解 / 262
7.5.2 題外話 / 270
7.6 本章小結 / 272
第8章 深入理解surface系統 / 273
8.1 概述 / 275
8.2 一個activity的顯示 / 275
8.2.1 activity的創建 / 275
8.2.2 activity的ui繪製 / 294
8.2.3 關於activity的總結 / 296
8.3 初識surface / 297
8.3.1 和surface有關的流程總結 / 297
8.3.2 surface之乾坤大挪移 / 298
8.3.3 乾坤大挪移的jni層分析 / 303
8.3.4 surface和畫圖 / 307
8.3.5 初識surface小結 / 309
8.4 深入分析surface / 310
8.4.1 與surface相關的基礎知識介紹 / 310
8.4.2 surfacecomposerclient分析 / 315
8.4.3 surfacecontrol分析 / 320
8.4.4 writetoparcel和surface對象的創建 / 331
8.4.5 lockcanvas和unlockcanvasandpost分析 / 335
8.4.6 graphicbuffer介紹 / 344
8.4.7 深入分析surface的總結 / 353
8.5 surfaceflinger分析 / 353
8.5.1 surfaceflinger的誕生 / 354
8.5.2 sf工作線程分析 / 359
8.5.3 transaction分析 / 368
8.5.4 關於surfaceflinger的總結 / 376
8.6 拓展思考 / 377
8.6.1 surface系統的cb對象分析 / 377
8.6.2 viewroot的你問我答 / 384
8.6.3 layerbuffer分析 / 385
8.7 本章小結 / 394
第9章 深入理解vold和rild / 395
9.1 概述 / 396
9.2 vold的原理與機制分析 / 396
9.2.1 netlink和uevent介紹 / 397
9.2.2 初識vold / 399
9.2.3 netlinkmanager模塊分析 / 400
9.2.4 volumemanager模塊分析 / 408
9.2.5 commandlistener模塊分析 / 414
9.2.6 vold實例分析 / 417
9.2.7 關於vold的總結 / 428
9.3 rild的原理與機制分析 / 428
9.3.1 初識rild / 430
9.3.2 ril_starteventloop分析 / 432
9.3.3 ril_init分析 / 437
9.3.4 ril_register分析 / 444
9.3.5 關於rild main函數的總結 / 447
9.3.6 rild實例分析 / 447
9.3.7 關於rild的總結 / 459
9.4 拓展思考 / 459
9.4.1 嵌入式系統的存儲知識介紹 / 459
9.4.2 rild和phone的改進探討 / 462
9.5 本章小結 / 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媒體掃描工作的流程總結 / 471
10.3 mediascanner分析 / 472
10.3.1 java層分析 / 472
10.3.2 jni層分析 / 476
10.3.3 pvmediascanner分析 / 479
10.3.4 關於mediascanner的總結 / 485
10.4 拓展思考 / 486
10.4.1 mediascannerconnection介紹 / 486
10.4.2 我問你答 / 487
10.5 本章小結 / 488
發佈了36 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章