本書是一本Android進(jìn)階類書籍,書中各知識(shí)點(diǎn)由淺入深、環(huán)環(huán)相扣,最終這些知識(shí)點(diǎn)形成了一個(gè)體系結(jié)構(gòu)。本書共分為11章。第1章介紹Android 5.0到Android 7.0的新特性。第2章介紹Material Design。第3章介紹View體系,包括View的事件分發(fā)、工作流程、自定義View等知識(shí)點(diǎn)。第4章介紹多線程的知識(shí)。第5章介紹網(wǎng)絡(luò)編程與網(wǎng)絡(luò)框架的知識(shí)。第6章介紹常用的設(shè)計(jì)模式。第7章介紹事件總線。第8到第10章介紹架構(gòu)設(shè)計(jì)所需要的知識(shí)點(diǎn)。第11章簡(jiǎn)單介紹Android系統(tǒng)框架與MediaPlayer框架。本書詳細(xì)并深入講解Android開發(fā)者必備的和前沿的知識(shí),適合有一定開發(fā)基礎(chǔ)的開發(fā)者閱讀,這有助于他們提高技術(shù)水平;同時(shí),本書系統(tǒng)的知識(shí)體系結(jié)構(gòu)也令高級(jí)開發(fā)者從中獲益良多。
為什么寫這本書
從2008年Android系統(tǒng)發(fā)布以來(lái),Android已經(jīng)發(fā)展了9年。在此期間,Android開發(fā)也相當(dāng)火熱。這時(shí),大量人員涌入Android開發(fā)職場(chǎng),并導(dǎo)致Android開發(fā)人才市場(chǎng)相對(duì)飽和。如此一來(lái),很多Android開發(fā)者會(huì)發(fā)現(xiàn)工作越來(lái)越難找,企業(yè)對(duì)開發(fā)者的要求也越來(lái)越高,企業(yè)需求最多的不再是初中級(jí)別的Android工程師,而是Android高級(jí)工程師。但是,Android高級(jí)工程師有限。有些人在從事了幾年開發(fā)工作后,對(duì)很多技術(shù)的理解卻仍停留在會(huì)用的階段。他們對(duì)于原理不求甚解,這導(dǎo)致他們進(jìn)入技術(shù)瓶頸期并長(zhǎng)期無(wú)法得到提高。很多開發(fā)者為了突破技術(shù)瓶頸,看了大量的網(wǎng)絡(luò)視頻和博客。盡管如此,他們?nèi)耘f無(wú)法突破自身的技術(shù)瓶頸。其主要原因是,他們沒有將學(xué)到的知識(shí)點(diǎn)形成體系化。因此,這就需要有一本成體系的進(jìn)階書來(lái)幫助這些開發(fā)人員成為Android高級(jí)工程師并突破自身的技術(shù)瓶頸?v觀市面上Android開發(fā)相關(guān)的書籍,其中大部分書籍是入門級(jí)別類圖書,還有一部分系統(tǒng)源碼、逆向分析和系統(tǒng)移植類圖書,而關(guān)于應(yīng)用開發(fā)進(jìn)階的書籍則少得可憐。本書正是一本成體系的應(yīng)用開發(fā)進(jìn)階圖書,書中所要傳達(dá)的不僅僅是知識(shí),其同時(shí)還會(huì)告訴讀者以下幾點(diǎn)。
1.要關(guān)注Android新技術(shù);
2.Java基礎(chǔ)和設(shè)計(jì)模式很重要;
3.學(xué)習(xí)框架要深入其原理;
4.要學(xué)習(xí)架構(gòu)設(shè)計(jì);
5.要了解和學(xué)習(xí)系統(tǒng)源碼。
本書內(nèi)容
本書共分為11章,各章內(nèi)容如下。
·第1章介紹Android5.0、Android6.0、Android7.0的新特性,包括Android5.0的RecyclerView、Android6.0的運(yùn)行時(shí)權(quán)限機(jī)制和Android7.0的多窗口模式等知識(shí)點(diǎn)。
·第2章介紹MaterialDesign以及DesignSupportLibrary常用的控件,并給出實(shí)例將DesignSupportLibrary中的常用控件結(jié)合在一起使用。
·第3章介紹View相關(guān)的進(jìn)階知識(shí),包括View的滑動(dòng)、View的事件分發(fā)和View的工作流程。最后結(jié)合以上知識(shí)點(diǎn)來(lái)介紹自定義View。
·第4章介紹多線程編程,本章不僅包括基礎(chǔ)的線程知識(shí),還會(huì)介紹線程同步和線程池等進(jìn)階知識(shí)點(diǎn),最后結(jié)合這些知識(shí)點(diǎn)來(lái)分析Android7.0的AsyncTask的源碼。
·第5章介紹網(wǎng)絡(luò)編程的基礎(chǔ)知識(shí)以及常用的網(wǎng)絡(luò)框架:Volley、OkHttp和Retrofit的使用方法和原理分析。
·第6章將設(shè)計(jì)模式進(jìn)行分類,并介紹每個(gè)分類中常用的設(shè)計(jì)模式。
·第7章介紹事件總線EventBus和otto的使用方法和原理。
·第8章介紹函數(shù)響應(yīng)式編程RxJava的使用方法,包括RxJava的基本使用、操作符、使用場(chǎng)景和源碼分析等知識(shí)點(diǎn)。
·第9章介紹注解的知識(shí)點(diǎn)和依賴注入框架ButterKnife和Dagger2的使用方法以及原理。
·第10章介紹Android應(yīng)用架構(gòu)設(shè)計(jì),包括MVP框架以及MVP結(jié)合RxJava和Dagger2,還有MVVM框架相關(guān)的DataBinding支持庫(kù)。
·第11章主要是指引讀者進(jìn)行Android系統(tǒng)源碼閱讀并帶其入門,介紹Android系統(tǒng)框架、源碼目錄和閱讀源碼工具,并以分析MediaPlayer框架的源碼作為示例。
本書特色
本書主要有以下特點(diǎn)。
·本書整體結(jié)構(gòu)由淺入深,從最簡(jiǎn)單的第1章到難一些的第11章,其難度是逐步加深的。
·本書為了分析一些框架的原理,會(huì)介紹一些知識(shí)點(diǎn)做鋪墊,比如為了更好地介紹依賴注入框架,需要首先了解注解相關(guān)的知識(shí)點(diǎn)。再比如要分析AsyncTask的源碼,則需要了解線程池和阻塞隊(duì)列等知識(shí)點(diǎn)。
·本書的知識(shí)點(diǎn)環(huán)環(huán)相扣,比如要介紹MVP框架的設(shè)計(jì),就需要先學(xué)習(xí)Retrofit、RxJava和Dagger2的相關(guān)知識(shí)點(diǎn)。
·本書對(duì)于很多知識(shí)點(diǎn)都有很深入的講解。其中,對(duì)于常用的框架,比如OkHttp、Retrofit、EventBus和RxJava等不只是講解了如何使用,而且更加深入地介紹了其原理。
·本書是目前市場(chǎng)上詳細(xì)介紹有關(guān)Android新特性、MaterialDesign、網(wǎng)絡(luò)框架、事件總線、RxJava、依賴注入框架和應(yīng)用架構(gòu)設(shè)計(jì)的難得一見的圖書。
讀者對(duì)象
本書的章節(jié)設(shè)計(jì)是由淺入深的,適合Android初、中、高級(jí)工程師閱讀。本書的定位是學(xué)習(xí)Android的第二本書,其閱讀前提是要有一定的Android基礎(chǔ)。
致謝
感謝本書的策劃編輯付睿,她在CSDN博客中發(fā)現(xiàn)了我,并積極推動(dòng)本書的出版進(jìn)度,這才使得本書得以及時(shí)出版。感謝本書的責(zé)任編輯李云靜,她審稿時(shí)很細(xì)致,這使得書中的一些錯(cuò)誤能被提早發(fā)現(xiàn)并改正。感謝我的父母在寫書過(guò)程中對(duì)我的不斷鼓勵(lì),這樣我才得以全力以赴地投入編寫工作。感謝所有關(guān)注我的朋友們,你們的鼓勵(lì)和認(rèn)可為我寫博客以及寫書帶來(lái)了不可或缺的動(dòng)力。
勘誤與互動(dòng)
本人雖已竭盡全力,但書中難免會(huì)有錯(cuò)誤,歡迎大家向我反饋,我也會(huì)在獨(dú)立博客和CSDN博客中定期發(fā)布本書的勘誤信息。
讀者服務(wù)
輕松注冊(cè)成為博文視點(diǎn)社區(qū)用戶,掃碼直達(dá)本書頁(yè)面。
·下載資源:本書如提供示例代碼及資源文件,均可在下載資源處下載。
·提交勘誤:您對(duì)書中內(nèi)容的修改意見可在提交勘誤處提交,若被采納,將獲贈(zèng)博文視點(diǎn)社區(qū)積分(在您購(gòu)買電子書時(shí),積分可用來(lái)抵扣相應(yīng)金額)。
·交流互動(dòng):在頁(yè)面下方讀者評(píng)論處留下您的疑問或觀點(diǎn),與我們和其他讀者一同學(xué)習(xí)交流。
收起全部↑
第1章 Android新特性 1
1.1 Android 5.0新特性 1
1.1.1 Android 5.0主要新特性概述 1
1.1.2 替換ListView和GridView的RecyclerView 3
1.1.3 卡片CardView 13
1.1.4 3種Notification 18
1.1.5 Toolbar與Palette 23
1.2 Android 6.0新特性 29
1.2.1 Android 6.0主要新特性概述 29
1.2.2 運(yùn)行時(shí)權(quán)限機(jī)制 30
1.3 Android 7.0新特性 43
1.3.1 Android 7.0主要新特性概述 43
1.3.2 多窗口模式 44
1.4 本章小結(jié) 47
第2章 Material Design 48
2.1 Material Design概述 48
2.1.1 核心思想 48
2.1.2 材質(zhì)與空間 49
2.1.3 動(dòng)畫 49
2.1.4 樣式 50
2.1.5 圖標(biāo) 51
2.1.6 圖像 51
2.1.7 組件 51
2.2 Design Support Library常用控件詳解 54
2.2.1 Snackbar的使用 54
2.2.2 用TextInputLayout實(shí)現(xiàn)登錄界面 55
2.2.3 FloatingActionButton的使用 60
2.2.4 用TabLayout實(shí)現(xiàn)類似網(wǎng)易選項(xiàng)卡的動(dòng)態(tài)滑動(dòng)效果 61
2.2.5 用NavigationView實(shí)現(xiàn)抽屜菜單界面 68
2.2.6 用CoordinatorLayout實(shí)現(xiàn)Toolbar隱藏和折疊 74
2.3 本章小結(jié) 86
第3章 View體系與自定義View 87
3.1 View與ViewGroup 87
3.2 坐標(biāo)系 89
3.2.1 Android坐標(biāo)系 89
3.2.2 View坐標(biāo)系 90
3.3 View的滑動(dòng) 91
3.3.1 layout()方法 92
3.3.2 offsetLeftAndRight()與offsetTopAndBottom() 94
3.3.3 LayoutParams(改變布局參數(shù)) 95
3.3.4 動(dòng)畫 95
3.3.5 scrollTo與scollBy 96
3.3.6 Scroller 98
3.4 屬性動(dòng)畫 99
3.5 解析Scroller 105
3.6 View的事件分發(fā)機(jī)制 108
3.6.1 源碼解析Activity的構(gòu)成 108
3.6.2 源碼解析View的事件分發(fā)機(jī)制 112
3.7 View的工作流程 119
3.7.1 View的工作流程入口 119
3.7.2 理解MeasureSpec 122
3.7.3 View的measure流程 126
3.7.4 View的layout流程 132
3.7.5 View的draw流程 135
3.8 自定義View 139
3.8.1 繼承系統(tǒng)控件的自定義View 140
3.8.2 繼承View的自定義View 141
3.8.3 自定義組合控件 147
3.8.4 自定義ViewGroup 152
3.9 本章小結(jié) 164
第4章 多線程編程 165
4.1 線程基礎(chǔ) 165
4.1.1 進(jìn)程與線程 165
4.1.2 線程的狀態(tài) 167
4.1.3 創(chuàng)建線程 168
4.1.4 理解中斷 170
4.1.5 安全地終止線程 171
4.2 同步 173
4.2.1 重入鎖與條件對(duì)象 173
4.2.2 同步方法 175
4.2.3 同步代碼塊 176
4.2.4 volatile 177
4.3 阻塞隊(duì)列 183
4.3.1 阻塞隊(duì)列簡(jiǎn)介 183
4.3.2 Java中的阻塞隊(duì)列 184
4.3.3 阻塞隊(duì)列的實(shí)現(xiàn)原理 186
4.3.4 阻塞隊(duì)列的使用場(chǎng)景 188
4.4 線程池 190
4.4.1 ThreadPoolExecutor 190
4.4.2 線程池的處理流程和原理 192
4.4.3 線程池的種類 193
4.5 AsyncTask的原理 197
4.6 本章小結(jié) 203
第5章 網(wǎng)絡(luò)編程與網(wǎng)絡(luò)框架 204
5.1 網(wǎng)絡(luò)分層 204
5.2 TCP的三次握手與四次揮手 205
5.3 HTTP協(xié)議原理 207
5.3.1 HTTP簡(jiǎn)介 207
5.3.2 HTTP請(qǐng)求報(bào)文 208
5.3.3 HTTP響應(yīng)報(bào)文 209
5.3.4 HTTP的消息報(bào)頭 210
5.3.5 抓包應(yīng)用舉例 211
5.4 HttpClient與HttpURLConnection 212
5.4.1 HttpClient 212
5.4.2 HttpURLConnection 216
5.5 解析Volley 218
5.5.1 Volley基本用法 218
5.5.2 源碼解析Volley 223
5.6 解析OkHttp 231
5.6.1 OkHttp基本用法 232
5.6.2 源碼解析OkHttp 240
5.7 解析Retrofit 255
5.7.1 Retrofit基本用法 255
5.7.2 源碼解析Retrofit 261
5.8 本章小結(jié) 270
第6章 設(shè)計(jì)模式 271
6.1 設(shè)計(jì)模式六大原則 271
6.2 設(shè)計(jì)模式分類 273
6.3 創(chuàng)建型設(shè)計(jì)模式 273
6.3.1 單例模式 274
6.3.2 簡(jiǎn)單工廠模式 277
6.3.3 工廠方法模式 279
6.3.4 建造者模式 281
6.4 結(jié)構(gòu)型設(shè)計(jì)模式 284
6.4.1 代理模式 285
6.4.2 裝飾模式 288
6.4.3 外觀模式 291
6.4.4 享元模式 295
6.5 行為型設(shè)計(jì)模式 298
6.5.1 策略模式 298
6.5.2 模板方法模式 301
6.5.3 觀察者模式 304
6.6 本章小結(jié) 307
第7章 事件總線 308
7.1 解析EventBus 308
7.1.1 使用EventBus 308
7.1.2 源碼解析EventBus 314
7.2 解析otto 324
7.2.1 使用otto 324
7.2.2 源碼解析otto 327
第8章 函數(shù)響應(yīng)式編程 333
8.1 RxJava基本用法 333
8.1.1 RxJava概述 333
8.1.2 RxJava基本實(shí)現(xiàn) 334
8.1.3 RxJava的不完整定義回調(diào) 336
8.2 RxJava的Subject 338
8.3 RxJava操作符入門 339
8.3.1 創(chuàng)建操作符 339
8.3.2 變換操作符 340
8.3.3 過(guò)濾操作符 344
8.3.4 組合操作符 349
8.3.5 輔助操作符 352
8.3.6 錯(cuò)誤處理操作符 355
8.3.7 條件操作符和布爾操作符 357
8.3.8 轉(zhuǎn)換操作符 360
8.4 RxJava的線程控制 362
8.5 RxJava的使用場(chǎng)景 362
8.5.1 RxJava結(jié)合OkHttp訪問網(wǎng)絡(luò) 362
8.5.2 RxJava結(jié)合Retrofit訪問網(wǎng)絡(luò) 364
8.5.3 用RxJava實(shí)現(xiàn)RxBus 368
8.6 RxJava源碼解析 370
8.6.1 RxJava的訂閱過(guò)程 371
8.6.2 RxJava的變換過(guò)程 372
8.6.3 RxJava的線程切換過(guò)程 376
8.7 本章小結(jié) 381
第9章 注解與依賴注入框架 382
9.1 注解 382
9.1.1 注解分類 382
9.1.2 定義注解 384
9.1.3 注解處理器 385
9.2 依賴注入的原理 392
9.2.1 控制反轉(zhuǎn)與依賴注入 392
9.2.2 依賴注入的實(shí)現(xiàn)方式 393
9.3 依賴注入框架 395
9.3.1 為何使用依賴注入框架 395
9.3.2 解析ButterKnife 395
9.3.3 解析Dagger2 405
9.4 本章小結(jié) 421
第10章 應(yīng)用架構(gòu)設(shè)計(jì) 422
10.1 MVC模式 422
10.2 MVP模式 423
10.2.1 應(yīng)用MVP模式 424
10.2.2 MVP結(jié)合RxJava和Dagger2 431
10.3 MVVM模式 438
10.3.1 解析Data Binding 439
10.3.2 應(yīng)用Data Binding 457
10.4 本章小結(jié) 459
第11章 系統(tǒng)架構(gòu)與MediaPlayer框架 460
11.1 Android系統(tǒng)架構(gòu) 460
11.2 Android系統(tǒng)源碼目錄 463
11.2.1 整體結(jié)構(gòu) 463
11.2.2 應(yīng)用層部分 464
11.2.3 應(yīng)用框架層部分 465
11.2.4 C/C++程序庫(kù)部分 465
11.3 Source Insights使用 466
11.4 MediaPlayer框架 467
11.4.1 Java Framework層的MediaPlayer分析 467
11.4.2 JNI層的MediaPlayer分析 469
11.4.3 Native層的MediaPlayer分析 471
11.5 本章小結(jié) 478
后記 479