定 價(jià):99 元
叢書名:高等學(xué)校計(jì)算機(jī)基礎(chǔ)教育教材精選
- 作者:劉望舒
- 出版時(shí)間:2018/10/1
- ISBN:9787121348389
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TN929.53
- 頁碼:468
- 紙張:
- 版次:01
- 開本:16開
本書是一本Android進(jìn)階書籍,主要針對(duì)Android 8.0系統(tǒng)源碼并結(jié)合應(yīng)用開發(fā)相關(guān)知識(shí)進(jìn)行介紹。本書共分為17章,從3個(gè)方面來組織內(nèi)容。第一方面介紹Android應(yīng)用開發(fā)所需要掌握的系統(tǒng)源碼知識(shí),第二方面介紹JNI、ClassLoader、Java虛擬機(jī)、DVM&ART虛擬機(jī)和Hook等技術(shù),第三方面介紹熱修復(fù)原理、插件化原理、繪制優(yōu)化和內(nèi)存優(yōu)化等與應(yīng)用開發(fā)相關(guān)的知識(shí)點(diǎn)。3個(gè)方面有所關(guān)聯(lián)并形成一個(gè)知識(shí)體系,從而使Android開發(fā)者能通過閱讀本書達(dá)到融會(huì)貫通的目的。本書適合有一定基礎(chǔ)的Android應(yīng)用開發(fā)工程師、Android系統(tǒng)開發(fā)工程師和對(duì)Android系統(tǒng)源碼感興趣的讀者閱讀。
劉望舒,資深開發(fā)工程師,Android進(jìn)階二部曲《Android進(jìn)階之光》《Android進(jìn)階解密》的作者,公眾號(hào)“劉望舒”的作者,CSDN人氣博主。他在博客中構(gòu)建了“Android相關(guān)原創(chuàng)知識(shí)體系”,該體系全面且深入并廣獲好評(píng)。他擁有近10年的開發(fā)經(jīng)驗(yàn)和多年的技術(shù)管理經(jīng)驗(yàn),對(duì)Android框架層及應(yīng)用層開發(fā)有著獨(dú)到、深入的理解。
第1章 Android系統(tǒng)架構(gòu) 1
1.1 Android系統(tǒng)架構(gòu) 1
1.2 Android系統(tǒng)源碼目錄 4
1.2.1 整體結(jié)構(gòu) 4
1.2.2 應(yīng)用層部分 5
1.2.3 應(yīng)用框架層部分 6
1.2.4 C/C++程序庫部分 6
1.3 源碼閱讀 7
1.3.1 在線閱讀 7
1.3.2 使用Source Insight 9
1.4 本章小結(jié) 12
第2章 Android系統(tǒng)啟動(dòng) 13
2.1 init進(jìn)程啟動(dòng)過程 13
2.1.1 引入init進(jìn)程 13
2.1.2 init進(jìn)程的入口函數(shù) 14
2.1.3 解析init.rc 17
2.1.4 解析Service類型語句 19
2.1.5 init啟動(dòng)Zygote 20
2.1.6 屬性服務(wù) 23
2.1.7 init進(jìn)程啟動(dòng)總結(jié) 27
2.2 Zygote進(jìn)程啟動(dòng)過程 27
2.2.1 Zygote概述 28
2.2.2 Zygote啟動(dòng)腳本 28
2.2.3 Zygote進(jìn)程啟動(dòng)過程介紹 30
2.2.4 Zygote進(jìn)程啟動(dòng)總結(jié) 38
2.3 SystemServer處理過程 39
2.3.1 Zygote處理SystemServer進(jìn)程 39
2.3.2 解析SystemServer進(jìn)程 44
2.3.3 SystemServer進(jìn)程總結(jié) 48
2.4 Launcher啟動(dòng)過程 48
2.4.1 Launcher概述 48
2.4.2 Launcher啟動(dòng)過程介紹 49
2.4.3 Launcher中應(yīng)用圖標(biāo)顯示過程 54
2.5 Android系統(tǒng)啟動(dòng)流程 59
2.6 本章小結(jié) 60
第3章 應(yīng)用程序進(jìn)程啟動(dòng)過程 61
3.1 應(yīng)用程序進(jìn)程簡(jiǎn)介 61
3.2 應(yīng)用程序進(jìn)程啟動(dòng)過程介紹 62
3.2.1 AMS發(fā)送啟動(dòng)應(yīng)用程序進(jìn)程請(qǐng)求 62
3.2.2 Zygote接收請(qǐng)求并創(chuàng)建應(yīng)用程序進(jìn)程 68
3.3 Binder線程池啟動(dòng)過程 75
3.4 消息循環(huán)創(chuàng)建過程 78
3.5 本章小結(jié) 80
第4章 四大組件的工作過程 81
4.1 根Activity的啟動(dòng)過程 82
4.1.1 Launcher請(qǐng)求AMS過程 82
4.1.2 AMS到ApplicationThread的調(diào)用過程 85
4.1.3 ActivityThread啟動(dòng)Activity的過程 94
4.1.4 根Activity啟動(dòng)過程中涉及的進(jìn)程 99
4.2 Service的啟動(dòng)過程 101
4.2.1 ContextImpl到AMS的調(diào)用過程 101
4.2.2 ActivityThread啟動(dòng)Service 103
4.3 Service的綁定過程 110
4.3.1 ContextImpl到AMS的調(diào)用過程 111
4.3.2 Service的綁定過程 112
4.4 廣播的注冊(cè)、發(fā)送和接收過程 122
4.4.1 廣播的注冊(cè)過程 122
4.4.2 廣播的發(fā)送和接收過程 127
4.5 Content Provider的啟動(dòng)過程 137
4.5.1 query方法到AMS的調(diào)用過程 137
4.5.2 AMS啟動(dòng)Content Provider的過程 143
4.6 本章小結(jié) 148
第5章 理解上下文Context 149
5.1 Context的關(guān)聯(lián)類 149
5.2 Application Context的創(chuàng)建過程 151
5.3 Application Context的獲取過程 156
5.4 Activity的Context創(chuàng)建過程 156
5.5 Service的Context創(chuàng)建過程 161
5.6 本章小結(jié) 163
第6章 理解ActivityManagerService 164
6.1 AMS家族 164
6.1.1 Android 7.0的AMS家族 164
6.1.2 Android 8.0的AMS家族 170
6.2 AMS的啟動(dòng)過程 171
6.3 AMS與應(yīng)用程序進(jìn)程 174
6.4 AMS重要的數(shù)據(jù)結(jié)構(gòu) 176
6.4.1 解析ActivityRecord 177
6.4.2 解析TaskRecord 177
6.4.3 解析ActivityStack 178
6.5 Activity棧管理 181
6.5.1 Activity任務(wù)棧模型 181
6.5.2 Launch Mode 182
6.5.3 Intent的FLAG 182
6.5.4 taskAffinity 185
6.6 本章小結(jié) 186
第7章 理解WindowManager 187
7.1 Window、WindowManager和WMS 187
7.2 WindowManager的關(guān)聯(lián)類 188
7.3 Window的屬性 193
7.3.1 Window的類型和顯示次序 193
7.3.2 Window的標(biāo)志 195
7.3.3 軟鍵盤相關(guān)模式 196
7.4 Window的操作 196
7.4.1 系統(tǒng)窗口的添加過程 197
7.4.2 Activity的添加過程 202
7.4.3 Window的更新過程 203
7.5 本章小結(jié) 206
第8章 理解WindowManagerService 207
8.1 WMS的職責(zé) 207
8.2 WMS的創(chuàng)建過程 209
8.3 WMS的重要成員 217
8.4 Window的添加過程(WMS處理部分) 219
8.5 Window的刪除過程 225
8.6 本章小結(jié) 230
第9章 JNI原理 231
9.1 系統(tǒng)源碼中的JNI 232
9.2 MediaRecorder框架中的JNI 233
9.2.1 Java Framework層的MediaRecorder 233
9.2.2 JNI層的MediaRecorder 234
9.2.3 Native方法注冊(cè) 235
9.3 數(shù)據(jù)類型的轉(zhuǎn)換 239
9.3.1 基本數(shù)據(jù)類型的轉(zhuǎn)換 240
9.3.2 引用數(shù)據(jù)類型的轉(zhuǎn)換 240
9.4 方法簽名 242
9.5 解析JNIEnv 244
9.5.1 jfieldID和jmethodID 245
9.5.2 使用jfieldID和jmethodID 247
9.6 引用類型 249
9.6.1 本地引用 249
9.6.2 全局引用 249
9.6.3 弱全局引用 250
9.7 本章小結(jié) 251
第10章 Java虛擬機(jī) 252
10.1 概述 252
10.1.1 Java虛擬機(jī)家族 253
10.1.2 Java虛擬機(jī)執(zhí)行流程 253
10.2 Java虛擬機(jī)結(jié)構(gòu) 254
10.2.1 Class文件格式 255
10.2.2 類的生命周期 256
10.2.3 類加載子系統(tǒng) 257
10.2.4 運(yùn)行時(shí)數(shù)據(jù)區(qū)域 258
10.3 對(duì)象的創(chuàng)建 260
10.4 對(duì)象的堆內(nèi)存布局 262
10.5 oop-klass模型 263
10.6 垃圾標(biāo)記算法 266
10.6.1 Java中的引用 266
10.6.2 引用計(jì)數(shù)算法 267
10.6.3 根搜索算法 269
10.7 Java對(duì)象在虛擬機(jī)中的生命周期 270
10.8 垃圾收集算法 271
10.8.1 標(biāo)記—清除算法 271
10.8.2 復(fù)制算法 272
10.8.3 標(biāo)記—壓縮算法 273
10.8.4 分代收集算法 274
10.9 本章小結(jié) 275
第11章 Dalvik和ART 276
11.1 Dalvik虛擬機(jī) 276
11.1.1 DVM與JVM的區(qū)別 276
11.1.2 DVM架構(gòu) 278
11.1.3 DVM的運(yùn)行時(shí)堆 280
11.1.4 DVM的GC日志 280
11.2 ART虛擬機(jī) 281
11.2.1 ART與DVM的區(qū)別 281
11.2.2 ART的運(yùn)行時(shí)堆 282
11.2.3 ART的GC日志 283
11.3 DVM和ART的誕生 285
11.4 本章小結(jié) 288
第12章 理解ClassLoader 289
12.1 Java中的ClassLoader 289
12.1.1 ClassLoader的類型 289
12.1.2 ClassLoader的繼承關(guān)系 291
12.1.3 雙親委托模式 292
12.1.4 自定義ClassLoader 295
12.2 Android中的ClassLoader 298
12.2.1 ClassLoader的類型 298
12.2.2 ClassLoader的繼承關(guān)系 300
12.2.3 ClassLoader的加載過程 302
12.2.4 BootClassLoader的創(chuàng)建 306
12.2.5 PathClassLoader的創(chuàng)建 309
12.3 本章小結(jié) 311
第13章 熱修復(fù)原理 312
13.1 熱修復(fù)的產(chǎn)生 312
13.2 熱修復(fù)框架的種類和對(duì)比 313
13.3 資源修復(fù) 314
13.3.1 Instant Run概述 314
13.3.2 Instant Run的資源修復(fù) 315
13.4 代碼修復(fù) 318
13.4.1 類加載方案 319
13.4.2 底層替換方案 321
13.4.3 Instant Run方案 322
13.5 動(dòng)態(tài)鏈接庫的修復(fù) 323
13.5.1 System的load和loadLibarary方法 323
13.5.2 nativeLoad方法分析 327
13.6 本章小結(jié) 333
第14章 Hook技術(shù) 334
14.1 Hook技術(shù)概述 334
14.2 Hook技術(shù)分類 336
14.3 代理模式 336
14.3.1 代理模式簡(jiǎn)單實(shí)現(xiàn) 337
14.3.2 動(dòng)態(tài)代理的簡(jiǎn)單實(shí)現(xiàn) 338
14.4 Hook startActivity方法 339
14.4.1 Hook Activity的startActivity方法 340
14.4.2 Hook Context的startActivity方法 343
14.4.3 Hook startActivity總結(jié) 344
14.5 本章小結(jié) 345
第15章 插件化原理 346
15.1 動(dòng)態(tài)加載技術(shù) 346
15.2 插件化的產(chǎn)生 347
15.2.1 應(yīng)用開發(fā)的痛點(diǎn)和瓶頸 347
15.2.2 插件化思想 348
15.2.3 插件化定義 350
15.3 插件化框架對(duì)比 351
15.4 Activity插件化 352
15.4.1 Activity的啟動(dòng)過程回顧 352
15.4.2 Hook IActivityManager方案實(shí)現(xiàn) 354
15.4.3 Hook Instrumentation方案實(shí)現(xiàn) 364
15.4.4 總結(jié) 367
15.5 Service插件化 368
15.5.1 插件化方面Service與Activity的不同 368
15.5.2 代理分發(fā)實(shí)現(xiàn) 370
15.6 ContentProvider插件化 376
15.6.1 ContentProvider的啟動(dòng)過程回顧 376
15.6.2 VirtualApk的實(shí)現(xiàn) 377
15.7 BroadcastReceiver的插件化 385
15.7.1 廣播插件化思路 386
15.7.2 VirtualApk的實(shí)現(xiàn) 386
15.8 資源的插件化 387
15.8.1 系統(tǒng)資源加載 387
15.8.2 VirtualApk實(shí)現(xiàn) 389
15.9 so的插件化 390
15.10 本章小結(jié) 393
第16章 繪制優(yōu)化 394
16.1 繪制性能分析 394
16.1.1 繪制原理 395
16.1.2 Profile GPU Rendering 396
16.1.3 Systrace 398
16.1.4 Traceview 404
16.2 布局優(yōu)化 407
16.2.1 布局優(yōu)化工具 407
16.2.2 布局優(yōu)化方法 411
16.2.3 避免GPU過度繪制 419
16.3 本章小結(jié) 420
第17章 內(nèi)存優(yōu)化 421
17.1 避免可控的內(nèi)存泄漏 421
17.1.1 什么是內(nèi)存泄漏 421
17.1.2 內(nèi)存泄漏的場(chǎng)景 422
17.2 Memory Monitor 428
17.2.1 使用Memory Monitor 429
17.2.2 大內(nèi)存申請(qǐng)與GC 430
17.2.3 內(nèi)存抖動(dòng) 430
17.3 Allocation Tracker 430
17.3.1 使用Allocation Tracker 431
17.3.2 alloc文件分析 431
17.4 Heap Dump 434
17.4.1 使用Heap Dump 434
17.4.2 檢測(cè)內(nèi)存泄漏 436
17.5 內(nèi)存分析工具M(jìn)AT 438
17.5.1 生成hprof文件 438
17.5.2 MAT分析hprof文件 440
17.6 LeakCanary 448
17.6.1 使用LeakCanary 449
17.6.2 LeakCanary應(yīng)用舉例 449
17.7 本章小結(jié) 453