Android 編程權威指南, 4/e (Android Programming: The Big Nerd Ranch Guide, 4/e)

Kristin Marsicano,Brian Gardner,Bill Phillips

  • Android 編程權威指南, 4/e (Android Programming: The Big Nerd Ranch Guide, 4/e)-preview-1
  • Android 編程權威指南, 4/e (Android Programming: The Big Nerd Ranch Guide, 4/e)-preview-2
Android 編程權威指南, 4/e (Android Programming: The Big Nerd Ranch Guide, 4/e)-preview-1

買這商品的人也買了...

商品描述

Big Nerd Ranch是美國一家專業的移動開發技術培訓機構。本書主要以其Android訓練營教學課程為基礎,融合了幾位作者多年的心得體會,是一本完全面向實戰的Android 編程權威指南。全書共32章,詳細介紹了七個Android應用的開發過程。通過這些精心設計的應用,讀者可掌握很多重要的理論知識和開發技巧,獲得寶貴的開發經驗。第4版較之前版本做了重大更新,每一章的內容都做了修改;同時,開發語言從Java換成了Kotlin,全面引入了Android Jetpack組件庫並開始使用第三方庫。

作者簡介

克莉絲汀.馬西卡諾(Kristin Marsicano),Big Nerd Ranch高級工程經理、講師、Android開發者。
她對學習、應用開發以及二者的交集充滿熱情。閒暇時,克莉絲汀喜歡跑步、彈尤克里裡,或與孩子一起搭樂高積木。


布賴恩.加德納(Brian Gardner),Big Nerd Ranch講師、Android開發者。
他是個學習狂,目前正在深入研究**的Android庫,此外還在攻讀佐治亞理工學院的機器學習碩士學位。
閒暇時,布賴恩喜歡繪畫、烘焙和旅行。


比爾.菲利普斯(Bill Phillips),Instagram軟件工程師,前Big Nerd Ranch講師。
他與人合作開發了廣受好評的Android訓練營培訓課程,並為之編寫教材(包括本書的第1版和第2版)。
比爾非常懂得生活的平衡之道,能把工作、音樂創作和音頻硬件項目這些事安排得井井有條。


克里斯.斯圖爾特(Chris Stewart),Big Nerd Ranch工程副總裁,前Android訓練營講師。
他致力於不斷取得進步和精進技能。
工作之餘,克里斯喜歡遠足和旅行。


【譯者簡介】
畢業於華東理工大學。
軟件開發及項目管理者,擁有十餘年軟件開發及項目管理經驗。
除了翻譯本書前三版之外,另譯有《Kotlin編程權威指南》。

目錄大綱

第1章Android開發初體驗1
1.1 Android開發基礎2
1.2創建Android項目2
1.3 Android Studio使用導航6
1.4用戶界面設計7
1.4.1視圖層級結構12
1.4. 2部件屬性12
1.4.3創建字符串資源13
1.4.4預覽佈局14
1.5從佈局XML到視圖對象16
1.6部件的實際應用19
1.6.1引用部件20
1. 6.2設置監聽器20
1.7創建提示消息22
1.8使用模擬器運行應用24
1.9深入學習:Android編譯過程26
1.10關於挑戰練習28
1.11挑戰練習:定制toast消息28

第2章Android與MVC設計模式29
2.1創建新類30
2.2 Android與MVC設計模式31
2.3更新視圖層33
2.4更新控制器層35
2.5添加圖標資源38
2.5 .1向項目中添加資源39
2.5.2在XML文件中引用資源41
2.6屏幕像素密度41
2.7在物理設備上運行應用43
2.8挑戰練習:為TextView添加監聽器45
2.9挑戰練習:添加後退按鈕45
2.10挑戰練習:從按鈕到圖標按鈕46

第3章activity的生命週期48
3.1旋轉GeoQuiz應用48
3.2 activity狀態與生命週期回調49
3.3日誌跟踪理解activity生命週期51
3.3.1輸出日誌信息51
3.3.2使用LogCat 53
3.4 activity生命週期如何響應用戶操作54
3.4.1暫時離開activity 54
3.4.2結束使用activity 57
3.4.3旋轉activity 58
3.5設備配置改變與activity生命週期58
3.6深入學習: UI刷新與多窗口模式62
3.7深入學習:日誌記錄的級別與函數62
3.8挑戰練習:禁止一題多答63
3.9挑戰練習:答題評分63

第4章UI狀態的保存與恢復64
4.1引入ViewModel依賴64
4.2添加ViewModel 65
4.2.1 ViewModel生命週期與ViewModelProvider 67
4.2.2向ViewModel添加數據69
4.3進程銷毀時保存數據72
4.3.1覆蓋onSaveInstanceState(Bundle)函數73
4.3.2保留實例狀態與activity記錄76
4.4 ViewModel與保存實例狀態77
4.5深入學習:Jetpack、AndroidX與架構組件78
4.6深入學習:解決問題要徹底79

第5章Android應用的調試81
5.1異常與棧跟踪82
5.1.1診斷應用異常83
5.1.2記錄棧跟踪日誌84
5.1.3設置斷點85
5.2 Android特有的調試工具88
5.2.1使用Android Lint 88
5.2.2 R類的問題91
5. 3挑戰練習:探索佈局檢查器92
5.4挑戰練習:探索Android性能分析器92

第6章第二個activity 93
6.1創建第二個activity 94
6.1.1創建新的activity 95
6. 1.2創建新的activity子類98
6.1.3在manifest配置文件中聲明activity 98
6.1.4為MainActivity添加CHEAT!按鈕99
6.2啟動activity 100
6.3 activity間的數據傳遞102
6.3.1使用intent extra 102
6.3.2從子activity獲取返回結果105
6.4 activity的使用與管理110
6.5挑戰練習:堵住作弊漏洞112
6.6挑戰練習:按題記錄作弊狀態112

第7章Android SDK版本與兼容113
7.1 Android SDK版本113
7.2 Android編程與兼容性問題114
7.2.1比較合理的版本114
7.2.2 SDK最低版本115
7.2.3 SDK目標版本116
7.2.4 SDK編譯版本116
7.2.5安全添加新版本API中的代碼116
7.2.6 JETPACK庫119
7.3使用Android開發者文檔120
7.4挑戰練習:報告編譯版本122
7.5挑戰練習:限製作弊次數122

第8章UI fragment與fragment管理器123
8.1 UI設計的靈活性需求124
8.2引入fragment 124
8.3著手開發CriminalIntent 125
8.4創建Crime數據類128
8.5創建UI fragment 129
8.5.1定義CrimeFragment的佈局129
8.5.2創建CrimeFragment類131
8.6託管UI fragment 137
8.6.1定義容器視圖138
8.6.2向FragmentManager中添加UI fragment 139
8.7採用fragment的應用架構143

第9章使用RecyclerView顯示列表145
9.1添加新Fragment和ViewModel 146
9.2添加RecyclerView 149
9.3創建列表項視圖佈局151
9.4 ViewHolder實現153
9.5使用Adapter填充RecyclerView 155
9.6循環使用視圖159
9.7清理綁定159
9.8響應點擊160
9.9深入學習:ListView與GridView 161
9.10挑戰練習:RecyclerView的ViewType 162

第10章使用佈局與部件創建用戶界面163
10.1初識ConstraintLayout佈局164
10.2圖形佈局編輯器165
10.3使用ConstraintLayout 168
10.3.1騰出空間169
10.3.2添加部件171
10.3.3約束的工作原理174
10.3.4編輯屬性175
10.3.5動態設置列表項179
10.4深入學習佈局屬性180
10.5深入學習:邊距與內邊距182
10.6深入學習:ConstraintLayout的發展動態183
10.7挑戰練習:日期格式化183

第11章數據庫與Room庫185
11.1 Room架構組建庫186
11.2創建數據庫187
11.2.1定義實體187
11.2.2創建數據庫類187
11.3定義數據庫訪問對象189
11.4使用倉庫模式訪問數據庫191
11 .5測試數據庫訪問193
11.6應用線程196
11.7使用LiveData 198
11.8挑戰練習:解決Schema警告203
11.9深入學習:單例204

第12章Fragment Navigation 206
12.1單Activity多Fragment 206
12.1.1 Fragment回調接口207
12.1.2替換fragment 209
12.2 Fragment argument 211
12.2.1將argument附加到fragment 212
12.2.2獲取argument 213
12.3使用LiveData數據轉換214
12.4更新數據庫217
12.4.1使用executor 218
12.4.2數據庫寫入與fragment生命週期219
12.5深入學習:為何要用Fragment Argument 220
12.6深入學習:Navigation架構組件庫221
12.7挑戰練習:實現高效的RecyclerView刷新222

第13章對話框223
13.1創建DialogFragment 224
13.2 fragment間的數據傳遞227
13.2.1傳遞數據給DatePickerFragment 228
13.2.2返回數據給CrimeFragment 230
13.3挑戰練習:時間選擇對話框232

第14章應用欄233
14.1 AppCompat默認應用欄234
14.2應用欄菜單235
14.2.1在XML文件中定義菜單235
14.2.2創建菜單237
14.2.3響應菜單項選擇240
14.3使用Android Asset Studio 242
14.4深入學習:應用欄、操作欄與工具欄244
14.5深入學習:AppCompat版應用欄246
14.6挑戰練習:RecyclerView空視圖246

第15章隱式intent 247
15.1添加按鈕部件248
15.2添加嫌疑人信息至模型層249
15.3使用格式化字符串250
15.4使用隱式intent 251
15.4.1隱式intent的組成252
15.4.2發送消息253
15.4.3獲取聯繫人信息256
15.4.4檢查可響應任務的activity 261
15.5挑戰練習:又一個隱式intent 263

第16章使用intent拍照264
16.1佈置照片264
16.2文件存儲267
16.2.1使用FileProvider 268
16.2.2指定照片存放位置269
16.3使用相機intent 270
16.4縮放和顯示位圖273
16.5功能聲明277
16.6挑戰練習:優化照片顯示278
16.7挑戰練習:優化縮略圖加載278

第17章應用本地化279
17.1資源本地化279
17.1.1默認資源282
17.1.2檢查資源本地化完成情況283
17.1.3區域修飾符284
17.2配置修飾符285
17.2.1可用資源優先級排定286
17.2.2多重配置修飾符288
17.2.3尋找最匹配的資源289
17.3測試備選資源290
17.4深入學習:確定設備屏幕尺寸290
17.5挑戰練習:日期顯示本地化291

第18章Android輔助功能292
18.1 TalkBack 292
18.1. 1點擊瀏覽294
18.1.2線性瀏覽295
18.2實現非文字型元素可讀297
18.2.1添加內容描述297
18.2.2實現部件可聚焦300
18.3提升輔助體驗301
18 .4深入學習:使用輔助功能掃描器302
18.5挑戰練習:優化列表項305
18.6挑戰練習:補全上下文信息305
18.7挑戰練習:事件主動通知306

第19章數據綁定與MVVM 307
19.1為何要用MVVM架構308
19.2 MVVM View Model與Jetpack ViewModel 308
19.3創建BeatBox應用308
19.4實現簡單的數據綁定309
19.5導入assets 312
19.6處理assets 314
19.7使用assets 316
19.8綁定數據318
19.8.1創建視圖模型320
19.8.2綁定至視圖模型321
19.8.3綁定數據觀察323
19.9深入學習:數據綁定再探325
19.9.1 lambda表達式325
19.9.2更多語法糖326
19.9.3 BindingAdapter 326
19. 10深入學習:LiveData和數據綁定327

第20章音頻播放與單元測試329
20.1創建SoundPool 329
20.2訪問Assets 330
20.3加載音頻文件330
20.4播放音頻332
20.5測試依賴332
20.6創建測試類333
20.7配置測試類335
20.8編寫測試函數336
20.9數據綁定回調341
20.10釋放音頻342
20.11深入學習:整合測試343
20.12深入學習:模擬對象與測試344
20. 13挑戰練習:播放進度控制345
20.14挑戰練習:設備旋轉問題346

第21章樣式與主題347
21.1顏色資源348
21.2樣式348
21.3主題351
21.4添加主題顏色353
21. 5覆蓋主題屬性354
21.6修改按鈕屬性358
21.7深入學習:樣式繼承拾遺361
21.8深入學習:引用主題屬性362

第22章XML drawable 363
22.1統一按鈕樣式364
22.2 shape drawable 365
22.3 state list drawable 367
22.4 layer list drawable 368
22.5深入學習:為什麼要用XML drawable 370
22.6深入學習:使用mipmap圖像370
22.7深入學習:使用9-patch圖像371
22.8挑戰練習:按鈕主題377

第23章深入學習intent和任務378
23.1創建NerdLauncher項目379
23.2解析隱式intent 380
23.3在運行時創建顯式intent 385
23.4任務與回退棧386
23.4.1在任務間切換387
23.4.2啟動新任務388
23.5用NerdLauncher當主屏幕391
23.6深入學習:進程與任務392
23.7深入學習:並發文檔394
23 .8挑戰練習:應用圖標397

第24章HTTP與後台任務398
24.1創建PhotoGallery應用399
24.2 Retrofit網絡連接基本402
24.2.1定義Retrofit API接口403
24.2.2構建Retrofit對象並創建API實例403
24.2.3執行網絡請求405
24.2.4獲取網絡使用權限407
24.2.5使用倉庫模式聯網408
24.3從Flickr獲取JSON數據411
24.4應對設備配置改變418
24.5在RecyclerView裡顯示結果421
24.6深入學習:其他JSON數據解析器和數據格式423
24.7深入學習:撤銷網絡請求423
24.8深入學習:管理依賴424
24.9挑戰練習:自定義Gson反序列化器425
24. 10挑戰練習:分頁426
24.11挑戰練習:動態調整網格列426

第25章Looper、Handler和HandlerThread 427
25.1配置RecyclerView以顯示圖片427
25.2準備下載數據430
25.3批量下載縮略圖431
25.4創建後台線程431
25.4.1創建生命週期感知線程432
25.4.2啟停HandlerThread 435
25.5 Message與message handler 436
25.5.1剖析Message 438
25.5.2剖析Handler 438
25.5.3使用handler 440
25.5.4傳遞handler 443
25.6觀察視圖的生命週期446
25.7保留fragment 450
25.7.1設備旋轉與保留fragment 450
25.7.2是否保留fragment 452
25.8深入學習:解決圖片下載問題452
25.9深入學習:StrictMode 453
25.10挑戰練習:觀察視圖LifecycleOwner的LiveData 454
25.11挑戰練習:優化ThumbnailDownloader 454
25.12挑戰練習:預加載以及緩存454

第26章搜索456
26.1搜索Flickr網站457
26.2使用SearchView 460
26.3使用sharedpreferences實現輕量級數據存儲464
26.4優化應用467
26.5用Android KTX編輯SharedPreferences 468
26.6挑戰練習:優化PhotoGallery應用469

第27章WorkManager 470
27.1創建Worker類470
27.2調度工作471
27.3檢查新圖片473
27.4通知用戶476
27.5服務的用戶控制481

第28章broadcast intent 486
28.1普通intent與broadcast intent 486
28 .2過濾前台通知487
28.2.1發送broadcast intent 487
28.2.2創建並登記standalone receiver 488
28.2.3使用私有權限限制broadcast 489
28.2.4創建並登記動態receiver 491
28.2.5使用有序broadcast收發數據493
28.3 receiver與長時運行任務497
28.4深入學習:本地事件497
28.4.1使用EventBus 498
28.4.2使用RxJava 499
28.5深入學習:受限的Broadcast Receiver 499
28.6深入學習:探測fragment的狀態500

第29章網頁瀏覽501
29.1最後一段Flickr數據501
29.2簡單方式:使用隱式intent 503
29.3較難的方式:使用WebView 504
29.4處理WebView的設備旋轉問題511
29 .5 WebView與定制UI 512
29.6深入學習:注入JavaScript對象512
29.7深入學習:WebView升級513
29.8深入學習:Chrome Custom Tabs 513
29.9挑戰練習:使用回退鍵瀏覽歷史網頁514

第30章定制視圖與觸摸事件515
30.1創建DragAndDraw項目515
30.2創建定制視圖516
30.3處理觸摸事件518
30.4 onDraw(Canvas)函數內的圖形繪製521
30.5深入學習:GestureDetector 523
30.6挑戰練習:設備旋轉問題523
30.7挑戰練習:旋轉矩形框524
30.8挑戰練習:輔助功能支持524

第31章屬性動畫525
31.1建立場景525
31.2簡單屬性動畫527
31.2.1視圖轉換屬性530
31.2.2使用不同的interpolator 531
31.2.3色彩漸變532
31.3播放多個動畫534
31.4深入學習:其他動畫API 536
31.4.1傳統動畫工具536
31.4.2轉場536
31.5挑戰練習536

第32章編後語537
32.1終極挑戰537
32.2插個廣告537
32.3致謝538