一切緣起于我在
CSDN 博客上寫技術(shù)文章。
還在讀本科的時候,我就喜歡閱讀
CSDN 出版的IT 技術(shù)雜志《程序員》。后來我進(jìn)入工業(yè)界開始從事 Android開發(fā)工作,在實(shí)際工作中遇到過很多技術(shù)難題,很多時候又都是從 CSDN 的技術(shù)博客上找到了答案。Android技術(shù)博大精深,體系龐大繁雜,一個 Android技術(shù)難點(diǎn)往往需要花費(fèi)半天、一天甚至更長時間才能研究清楚,然而事后一年半載,又遺忘得干干凈凈。好記性不如爛筆頭! 吸取了這些經(jīng)驗(yàn)和教訓(xùn),我開始有意識地把自己對 Android技術(shù)探索和發(fā)現(xiàn)的成果性內(nèi)容整理成文章,發(fā)表在 CSDN 博客上。當(dāng)時這么做主要出于三方面的考慮:
第一,知識點(diǎn)方便備查。在工作或?qū)W習(xí)中,如果遇到某一領(lǐng)域之前做過的內(nèi)容,只要想起其中一個或幾個關(guān)鍵詞,就能快速搜索、定位到之前圍繞這些技術(shù)寫的文章,朝花夕拾,進(jìn)而找回記憶。
第二,現(xiàn)在的
Android技術(shù)內(nèi)容交織,不斷向縱深發(fā)展,需要豐富的配圖和示例代碼加以說明才能弄明白,在這種情況下若還用筆和紙記錄顯然很不方便。而在博客這種形式下,要想引用文章,則直接插入一個url網(wǎng)址鏈接就可以,配圖、插入程序代碼更不在話下。
第三,Android技術(shù)體系復(fù)雜,內(nèi)容越來越龐雜,有了之前寫好的博客文章,至少可以從中找到線索,找回當(dāng)時研究的思路和方法,快速搞清楚問題的關(guān)鍵。這樣無疑大大提升了學(xué)習(xí)和工作效率。
我就這樣日復(fù)一日、年復(fù)一年堅(jiān)持寫博客文章,不知不覺中養(yǎng)成了寫博客的習(xí)慣,幾天不寫就感覺生活中缺了點(diǎn)什么。于是博客文章越寫越多,此時我發(fā)現(xiàn)自己博客的閱讀量不斷攀升,50萬、100萬、200萬! 這個過程中讀者數(shù)量也不斷增多,可以說一天一個樣,一天一個數(shù)據(jù)報(bào)表!如果說開始寫博客文章的初心是記錄自己的研究心得,沉淀自己的技術(shù)積累,然而當(dāng)我的博客文章閱讀量和讀者群體達(dá)到一定規(guī)模并越來越多的時候,寫博客文章就成為了一種樂趣。在這種樂趣的驅(qū)動下,每當(dāng)攻克一個技術(shù)難題,腦海中第一反應(yīng)就是有必要整理一下,寫成簡單易懂的博客文章分享給大家。
在博客寫作的過程中,我受到了大量的支持和鼓勵,這又促使我寫出更多、更好的博客文章,以不辜負(fù)大家的期待。同時,博客寫作豐富了自己的人生,也帶來了與之相關(guān)的機(jī)會。
本書內(nèi)容
本書所介紹的高級開發(fā)技術(shù),是從軟件工業(yè)強(qiáng)度出發(fā),面向軟件生產(chǎn)環(huán)節(jié),甄選出 Android多種關(guān)鍵和高效的技術(shù),可直接快速投放到企業(yè)級、產(chǎn)品級項(xiàng)目的高級開發(fā)技術(shù)中,覆蓋了完整開發(fā)一個 AndroidApp應(yīng)用涉及的各個層面、各個環(huán)節(jié)。
今非昔比,如今的
Android技術(shù)及其平臺和框架性技術(shù),都已經(jīng)發(fā)生了不小的變化。新的技術(shù)框架和編程模型均已有了很大的改變和演進(jìn)。我應(yīng)該算是中國比較早跟進(jìn) Android技術(shù)的開發(fā)者之一,看到了 Android技術(shù)多年來的積累沉淀以及整個移動端軟件開發(fā)行業(yè)的發(fā)展,催生了相當(dāng)多 Android平臺之上的基礎(chǔ)和初級開發(fā)者。
然而,當(dāng)開發(fā)者面對實(shí)際的工業(yè)級項(xiàng)目產(chǎn)品開發(fā)時,需要解決的開發(fā)任務(wù)所涉及的問題是極為苛刻的設(shè)計(jì)要求、復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)流轉(zhuǎn)處理,若僅僅使用 Android基礎(chǔ)開發(fā)技術(shù),所耗費(fèi)的時間和人力成本將會十分巨大。在這種情形下,無論是從技術(shù)管理決策層角度,還是站在一線的普通開發(fā)者立場,都非常有必要考慮選用快捷、高級的 Android研發(fā)技術(shù)路線和框架性解決方案。以上所述問題,正是本書所要闡述的技術(shù)內(nèi)容。
本書讀者對象
讀者須具有一定的 Android和Java程序設(shè)計(jì)語言基礎(chǔ),但是對這些基礎(chǔ)前置知識不必做過多嚴(yán)格要求,本書盡量用相對簡單易懂的例子來說明所要介紹的技術(shù)點(diǎn)。如果讀者已經(jīng)擁有了基礎(chǔ)知識,但不滿足于停留在初級開發(fā)水平,希望在技術(shù)上尋求進(jìn)階,那么本書是非常適合的。本書是 Android技術(shù)的提高和進(jìn)階性質(zhì)的技術(shù)書籍,通過本書,讀者可以掌握前沿實(shí)用、高效便捷的 Android開發(fā)技術(shù),并可以很快地把從本書學(xué)到的高級開發(fā)技術(shù)應(yīng)用到具體的項(xiàng)目開發(fā)實(shí)踐中。
四川大學(xué)的彭艦教授完成了本書的審校工作,四川大學(xué)的研究生弋沛玉、汪瑩、郭振杰、鄧力嘉、鐘昌康、曹先波、陳新鵬對本書的審校亦有貢獻(xiàn)。本書的順利完成和出版,離不開北京航空航天大學(xué)出版社以及董宜斌編輯的支持和幫助,在此表示衷心的感謝。還要感謝 Android,謝謝 Android為這個世界帶來的美好!
本書難免存在不妥之處,如果讀者發(fā)現(xiàn)任何問題或者有任何疑問,希望和作者交流,我的郵箱是zhangphil@live.com。
張 飛
2018年10月
張飛,2004年至2011年就讀于四川大學(xué)。2008年本科畢業(yè)后被保送攻讀計(jì)算機(jī)科學(xué)與技術(shù)碩士研究生。專注于Android新技術(shù)研究和應(yīng)用開發(fā)。長期活躍于中國Android技術(shù)領(lǐng)域,2017年11月受邀參加國際Android技術(shù)大會并作為嘉賓發(fā)表主題演講。寫有CSDN原創(chuàng)技術(shù)博客,博客閱讀量達(dá)到300萬 ,同時是CSDN博客專家和專欄作家。
第1章 高級圖形圖像處理…………………………………………………………… 1
1.1 ShapeDrawable、PaintDrawable與
OvalShape、RectShape、ArcShape ………………… 1
1.2 GradientDrawable梯度漸變 ……………………………………………………… 3
1.3 過渡動畫的 TransitionDrawable …………………………………………………… 9
1.4 圓形圓角圖像 …………………………………………………………………… 10
1.5 ImageView 的setImageLevel和level-list
………………………………………… 13
1.6 紅色小圓球樣式的新消息提醒 …………………………………………………… 14
1.7 小 結(jié) …………………………………………………………………………… 18
第2章 圖形圖像渲染的梯度漸變 ………………………………………………… 20
2.1 線性梯度漸變渲染器 LinearGradient……………………………………………… 20
2.2 掃描梯度漸變渲染器SweepGradient……………………………………………… 23
2.3 放射環(huán)狀梯度漸變渲染器 RadialGradient ………………………………………… 25
2.4 xml配置線性梯度漸變 …………………………………………………………… 26
2.5 xml配置放射狀梯度漸變 ………………………………………………………… 31
2.6 xml配置掃描形梯度漸變 ………………………………………………………… 34
2.7 小 結(jié) …………………………………………………………………………… 35
第3章 由靜至動的動態(tài)拖曳
View及動畫 ……………………………………… 36
3.1 alpha:透明漸變屬性動畫 ………………………………………………………… 36
3.2 rotation:旋轉(zhuǎn)屬性動畫 …………………………………………………………… 37
3.3 translation:位移屬性動畫 ………………………………………………………… 38
3.4 scale:縮放屬性動畫 ……………………………………………………………… 39
3.5 AnimatorSet:屬性動畫集 ………………………………………………………… 40
3.6 ViewDragHelper:拖曳管控 ……………………………………………………… 42
3.7 小 結(jié) …………………………………………………………………………… 50
第4章
View高級特性 ……………………………………………………………… 51
4.1 橫豎屏切換不同尺寸的 View …………………………………………………… 51
4.2 onMeasure控制 View 的大小尺寸 ………………………………………………… 54
4.3 onLayout控制子 View 的空間位置 ……………………………………………… 59
4.4 小 結(jié) …………………………………………………………………………… 63
第5章 高級組件開發(fā) ……………………………………………………………… 65
5.1 Android設(shè)備消息通知 …………………………………………………………… 65
5.2 狀態(tài)欄的通知消息點(diǎn)擊觸發(fā)事件啟動后臺的 Activity………………………………… 68
5.3 消息通知的自定義布局…………………………………………………………… 69
5.4 WindowManager懸浮窗 ………………………………………………………… 70
5.5 白天/夜間模式標(biāo)準(zhǔn)實(shí)現(xiàn) ………………………………………………………… 72
5.6 小 結(jié) …………………………………………………………………………… 77
第6章 桌面部件
AppWidget……………………………………………………… 78
6.1 桌面部件 AppWidget的簡單實(shí)現(xiàn) ………………………………………………… 78
6.2 桌面部件 AppWidget的定制開發(fā) ………………………………………………… 84
6.3 簡單音樂播放器的桌面部件 Widget ……………………………………………… 89
6.4 小 結(jié) …………………………………………………………………………… 95
第7章
OkHttp一攬子網(wǎng)絡(luò)技術(shù)解決方案 ………………………………………… 96
7.1 OkHttp異步方式下載 …………………………………………………………… 96
7.2 OkHttp同步方式加載數(shù)據(jù) ……………………………………………………… 100
7.3 OKHttp的post上傳 …………………………………………………………… 101
7.4 OkHttp的基本配置 …………………………………………………………… 104
7.6 小 結(jié) ………………………………………………………………………… 110
第8章 圖片加載利器
Glide ……………………………………………………… 112
8.1 Glide最簡單的網(wǎng)絡(luò)圖片加載方式 ……………………………………………… 112
8.2 Glide加載gif動態(tài)圖 …………………………………………………………… 113
8.3 Glide占位圖placeholder………………………………………………………… 114
8.4 Glide加載圖片的特殊效果 ……………………………………………………… 115
8.5 Glide內(nèi)存緩存和硬盤緩存 ……………………………………………………… 121
8.6 小 結(jié) ………………………………………………………………………… 123
第9章 高階Java多線程在
Android中的運(yùn)用 ………………………………… 124
9.1 多線程技術(shù)概述 ………………………………………………………………… 125
9.2 Java線程池 ThreadPoolExecutor………………………………………………… 126
9.3 Java線程池的調(diào)度ScheduledThreadPoolExecutor ……………………………… 129
9.4 Future、Callable類獲得線程返回結(jié)果 …………………………………………… 131
9.5 FutureTask線程類詳解 ………………………………………………………… 134
9.6 Java線程安全的 LinkedBlockingQueue類和 ConcurrentLinkedQueue類 …………… 136
9.7 小 結(jié) ………………………………………………………………………… 139
第10章 大數(shù)據(jù)、多任務(wù)、斷點(diǎn)續(xù)傳下載管理 …………………………………… 140
10.1 DownloadManager開發(fā)簡介 …………………………………………………… 140
10.2 DownloadManager下載狀態(tài)查詢 ……………………………………………… 145
10.3 DownloadManager下載進(jìn)度、存放目錄等 ……………………………………… 147
10.4 DownloadManager下載完成事件監(jiān)聽…………………………………………… 148
10.5 小 結(jié) ………………………………………………………………………… 150
第11章 內(nèi)存與物理存儲高效緩存及策略 ……………………………………… 152
11.1 引入 LruCache內(nèi)存緩存技術(shù)的背景 …………………………………………… 152
11.2 內(nèi)存 LruCache緩存及算法的策略思想 ………………………………………… 153
11.3 二級緩存 LruCache和 DiskLruCache …………………………………………… 159
11.4 DiskLruCache緩存讀寫操作具體過程 ………………………………………… 162
11.5 小 結(jié) ………………………………………………………………………… 165
第12章 進(jìn)程間通信之
AIDL機(jī)制 ……………………………………………… 166
12.1 進(jìn)程間通信概述 ……………………………………………………………… 166
12.1.7 信號量 …………………………………………………………………… 169
12.1.8 套接字 …………………………………………………………………… 170
12.2 進(jìn)程間通信 …………………………………………………………………… 170
12.2.1 進(jìn)程間通信 AIDL之服務(wù)器端 …………………………………………… 171
12.2.2 進(jìn)程間通信 AIDL之客戶端 ……………………………………………… 173
12.3 進(jìn)程間通信 AIDL之雙向通信 ………………………………………………… 175
12.4 小 結(jié) ……………………………………………………………………… 179
第13章 框架性架構(gòu)體系 ………………………………………………………… 180
13.1 EventBus:靈活輕便的跨域消息通信 …………………………………………… 180
13.2 Lifecycle:從生命周期中解放出來 ……………………………………………… 184
13.3 Android運(yùn)行時權(quán)限 …………………………………………………………… 187
13.4 小 結(jié) ………………………………………………………………………… 192
第14章 企業(yè)級開發(fā) ORM
數(shù)據(jù)庫技術(shù) ………………………………………… 194
14.1 ORMLite數(shù)據(jù)庫環(huán)境搭建 ……………………………………………………… 194
14.2 ORMLite數(shù)據(jù)庫應(yīng)用開發(fā) ……………………………………………………… 195
14.3 ORMLite的外鍵關(guān)聯(lián)映射 ……………………………………………………… 200
14.4 Android平臺上的greenDAO 關(guān)系數(shù)據(jù)庫 ……………………………………… 205
14.5 greenDAO 關(guān)系映射模型 ……………………………………………………… 213
14.6 小 結(jié) ………………………………………………………………………… 218
第15章 多媒體與圖像識別掃描技術(shù) …………………………………………… 219
15.1 Android二維碼/條形碼技術(shù)方案綜述 ………………………………………… 219
15.2 Android二維碼/條形碼技術(shù)開發(fā)實(shí)踐 ………………………………………… 220
15.3 SurfaceView 簡介與實(shí)例 ……………………………………………………… 223
15.4 TextureView 與SurfaceTexture實(shí)現(xiàn)相機(jī)拍照 ………………………………… 226
15.5 TextureView 與 MediaPlayer實(shí)現(xiàn)視頻播放 …………………………………… 231
15.6 小 結(jié) ………………………………………………………………………… 233
第16章 藍(lán)牙網(wǎng)絡(luò)通信技術(shù) ……………………………………………………… 235
16.1 發(fā)現(xiàn)藍(lán)牙設(shè)備 ………………………………………………………………… 236
16.2 PairedBluetoothDevices:藍(lán)牙設(shè)備配對 ………………………………………… 241
16.3 藍(lán)牙設(shè)備連接的建立…………………………………………………………… 243
16.4 藍(lán)牙設(shè)備之間的數(shù)據(jù)傳輸 ……………………………………………………… 247
16.5 手機(jī)端通過藍(lán)牙發(fā)送文件到電腦端 …………………………………………… 252
16.6 小 結(jié) ………………………………………………………………………… 260
第17章
RxJava/RxAndroid脈絡(luò)清晰的響應(yīng)式編程 …………………………… 261
17.1 RxJava/RxAndroid技術(shù)概論 …………………………………………………… 261
17.2 intervalRange與interval間隔、周期性地發(fā)射數(shù)據(jù)流 …………………………… 264
17.3 map和flatMap操作符 ………………………………………………………… 266
17.4 zip、merge和concat操作符 …………………………………………………… 269
17.5 scan和filter操作符 …………………………………………………………… 272
17.6 take、skip和takeLast操作符 …………………………………………………… 275
17.7 ofType根據(jù)類型選擇輸出結(jié)果 ………………………………………………… 277
17.8 distinct與distinctUntilChanged操作符 ………………………………………… 279
17.9 doAfterNext和doOnNext接力鏈?zhǔn)讲僮?……………………………………… 280
17.10 buffer緩沖操作符 …………………………………………………………… 282
17.11 retry錯誤重試 ……………………………………………………………… 285
17.12 小 結(jié) ……………………………………………………………………… 288
第18章
AndroidDataBinding:MVVM 架構(gòu)基石,數(shù)據(jù)驅(qū)動 App運(yùn)轉(zhuǎn) ……… 289
18.1 AndroidDataBinding概述 ……………………………………………………… 289
18.2 初識 AndroidDataBinding……………………………………………………… 291
18.3 notifyPropertyChanged:動態(tài)更新數(shù)據(jù) ………………………………………… 295
18.4 @=操作符雙向綁定…………………………………………………………… 298
18.5 數(shù)據(jù)綁定的 BindingAdapter適配器 …………………………………………… 299
18.6 BindingMethods可實(shí)現(xiàn) BindingAdapter功能 …………………………………… 301
18.7 基于InverseBindingAdapter實(shí)現(xiàn)雙向綁定之反向綁定 ………………………… 302
18.8 基于InverseBindingMethods實(shí)現(xiàn)雙向綁定之反向綁定 ……………………………… 308
18.9 基于 BindingAdapter與InverseBindingAdapter實(shí)現(xiàn)SeekBar雙向綁定…………… 310
18.10 基于InverseBindingMethods實(shí)現(xiàn)SeekBar雙向綁定 ……………………………… 313
18.11 AndroidDataBinding技術(shù)在傳統(tǒng)ListView中的運(yùn)用………………………………… 315
18.12 AndroidDataBinding技術(shù)在 RecyclerView中的運(yùn)用 ……………………………… 317
18.13 AndroidDataBinding的 Lambda表達(dá)式 ……………………………………… 318
18.14 小 結(jié) ……………………………………………………………………… 320
第19章
AndroidNDK 開發(fā)技術(shù) ………………………………………………… 321
19.1 JavaJNI技術(shù)簡介……………………………………………………………… 321
19.2 AndroidNDK 開發(fā)環(huán)境配置 …………………………………………………… 323
19.3 AndroidStudio自動生成的 NDK工程代碼結(jié)構(gòu)分析 ……………………………… 325
19.4 自定義實(shí)現(xiàn) Android的 NDK 庫 ………………………………………………… 328
19.5 小 結(jié) ………………………………………………………………………… 332
第20章
Android傳感器 ………………………………………………………… 333
20.1 Android傳感器開發(fā)概述 ……………………………………………………… 334
20.2 Android線性加速度傳感器 …………………………………………………… 335
20.3 Android近距離傳感器 ………………………………………………………… 338
20.4 Android壓力傳感器 …………………………………………………………… 340
20.5 Android光強(qiáng)傳感器 …………………………………………………………… 341
20.6 Android方位傳感器 …………………………………………………………… 342
20.7 Android運(yùn)動計(jì)步傳感器 ……………………………………………………… 345
20.8 小 結(jié) ………………………………………………………………………… 346
參考文獻(xiàn) …………………………………………………………………………… 348