關(guān)于我們
書單推薦
新書推薦
|
Android編程權(quán)威指南 第4版
Big Nerd Ranch是美國一家專業(yè)的移動開發(fā)技術(shù)培訓(xùn)機(jī)構(gòu)。本書主要以其Android訓(xùn)練營教學(xué)課程為基礎(chǔ),融合了幾位作者多年的心得體會,是一本完全面向?qū)崙?zhàn)的Android 編程權(quán)威指南。全書共32章,詳細(xì)介紹了七個Android應(yīng)用的開發(fā)過程。通過這些精心設(shè)計的應(yīng)用,讀者可掌握很多重要的理論知識和開發(fā)技巧,獲得寶貴的開發(fā)經(jīng)驗(yàn)。第4版較之前版本做了重大更新,每一章的內(nèi)容都做了修改;同時,開發(fā)語言從Java換成了Kotlin,全面引入了Android Jetpack組件庫并開始使用第三方庫。
專業(yè)——源自大名鼎鼎的Big Nerd Ranch訓(xùn)練營培訓(xùn)講義,該訓(xùn)練營已經(jīng)為微軟、Google、Facebook等行業(yè)巨頭培養(yǎng)了眾多專業(yè)人才。
全面——涵蓋Android開發(fā)必備理論概念和技術(shù)知識點(diǎn),從Android 5.0到Android 11.0都適用。
實(shí)用——七個Android應(yīng)用開發(fā)實(shí)戰(zhàn)項(xiàng)目,傳授一線開發(fā)經(jīng)驗(yàn)。
易懂——以循序漸進(jìn)的方式精心編排章節(jié),一步一步寫出Android應(yīng)用。
第4版較之前版本做了重大更新,每一章的內(nèi)容都做了修改;
同時,開發(fā)語言從Java換成了Kotlin,全面引入了Android Jetpack組件庫并開始使用第三方庫;
隨書附贈Android開發(fā)速查表,隨用隨查。
克莉絲汀·馬西卡諾(Kristin Marsicano),Big Nerd Ranch高級工程經(jīng)理、講師、Android開發(fā)者。她對學(xué)習(xí)、應(yīng)用開發(fā)以及二者的交集充滿熱情。閑暇時,克莉絲汀喜歡跑步、彈尤克里里,或與孩子一起搭樂高積木。
布賴恩·加德納(Brian Gardner),Big Nerd Ranch講師、Android開發(fā)者。他是個學(xué)習(xí)狂,目前正在深入研究最新的Android庫,此外還在攻讀佐治亞理工學(xué)院的機(jī)器學(xué)習(xí)碩士學(xué)位。閑暇時,布賴恩喜歡繪畫、烘焙和旅行。
比爾·菲利普斯(Bill Phillips),Instagram軟件工程師,前Big Nerd Ranch講師。他與人合作開發(fā)了廣受好評的Android訓(xùn)練營培訓(xùn)課程,并為之編寫教材(包括本書的第1版和第2版)。比爾非常懂得生活的平衡之道,能把工作、音樂創(chuàng)作和音頻硬件項(xiàng)目這些事安排得井井有條。
克里斯·斯圖爾特(Chris Stewart),Big Nerd Ranch工程副總裁,前Android訓(xùn)練營講師。他致力于不斷取得進(jìn)步和精進(jìn)技能。工作之余,克里斯喜歡遠(yuǎn)足和旅行。
【譯者簡介】
畢業(yè)于華東理工大學(xué)。軟件開發(fā)及項(xiàng)目管理者,擁有十余年軟件開發(fā)及項(xiàng)目管理經(jīng)驗(yàn)。除了翻譯本書前三版之外,另譯有《Kotlin編程權(quán)威指南》。
第 1 章 Android開發(fā)初體驗(yàn) 1
1.1 Android開發(fā)基礎(chǔ) 2
1.2 創(chuàng)建Android項(xiàng)目 2
1.3 Android Studio使用導(dǎo)航 6
1.4 用戶界面設(shè)計 7
1.4.1 視圖層級結(jié)構(gòu) 12
1.4.2 部件屬性 12
1.4.3 創(chuàng)建字符串資源 13
1.4.4 預(yù)覽布局 14
1.5 從布局XML到視圖對象 16
1.6 部件的實(shí)際應(yīng)用 19
1.6.1 引用部件 20
1.6.2 設(shè)置監(jiān)聽器 20
1.7 創(chuàng)建提示消息 22
1.8 使用模擬器運(yùn)行應(yīng)用 24
1.9 深入學(xué)習(xí):Android編譯過程 26
1.10 關(guān)于挑戰(zhàn)練習(xí) 28
1.11 挑戰(zhàn)練習(xí):定制toast消息 28
第 2 章 Android與MVC設(shè)計模式 29
2.1 創(chuàng)建新類 30
2.2 Android與MVC設(shè)計模式 31
2.3 更新視圖層 33
2.4 更新控制器層 35
2.5 添加圖標(biāo)資源 38
2.5.1 向項(xiàng)目中添加資源 39
2.5.2 在XML文件中引用資源 41
2.6 屏幕像素密度 41
2.7 在物理設(shè)備上運(yùn)行應(yīng)用 43
2.8 挑戰(zhàn)練習(xí):為TextView添加監(jiān)聽器 45
2.9 挑戰(zhàn)練習(xí):添加后退按鈕 45
2.10 挑戰(zhàn)練習(xí):從按鈕到圖標(biāo)按鈕 46
第 3 章 activity的生命周期 48
3.1 旋轉(zhuǎn)GeoQuiz應(yīng)用 48
3.2 activity狀態(tài)與生命周期回調(diào) 49
3.3 日志跟蹤理解activity生命周期 51
3.3.1 輸出日志信息 51
3.3.2 使用LogCat 53
3.4 activity生命周期如何響應(yīng)用戶操作 54
3.4.1 暫時離開activity 54
3.4.2 結(jié)束使用activity 57
3.4.3 旋轉(zhuǎn)activity 58
3.5 設(shè)備配置改變與activity生命周期 58
3.6 深入學(xué)習(xí):UI刷新與多窗口模式 62
3.7 深入學(xué)習(xí):日志記錄的級別與函數(shù) 62
3.8 挑戰(zhàn)練習(xí):禁止一題多答 63
3.9 挑戰(zhàn)練習(xí):答題評分 63
第 4 章 UI狀態(tài)的保存與恢復(fù) 64
4.1 引入ViewModel依賴 64
4.2 添加ViewModel 65
4.2.1 ViewModel生命周期與ViewModelProvider 67
4.2.2 向ViewModel添加數(shù)據(jù) 69
4.3 進(jìn)程銷毀時保存數(shù)據(jù) 72
4.3.1 覆蓋onSaveInstanceState(Bundle)函數(shù) 73
4.3.2 保留實(shí)例狀態(tài)與activity記錄 76
4.4 ViewModel與保存實(shí)例狀態(tài) 77
4.5 深入學(xué)習(xí):Jetpack、AndroidX與架構(gòu)組件 78
4.6 深入學(xué)習(xí):解決問題要徹底 79
第 5 章 Android應(yīng)用的調(diào)試 81
5.1 異常與棧跟蹤 82
5.1.1 診斷應(yīng)用異!83
5.1.2 記錄棧跟蹤日志 84
5.1.3 設(shè)置斷點(diǎn) 85
5.2 Android特有的調(diào)試工具 88
5.2.1 使用Android Lint 88
5.2.2 R類的問題 91
5.3 挑戰(zhàn)練習(xí):探索布局檢查器 92
5.4 挑戰(zhàn)練習(xí):探索Android性能分析器 92
第 6 章 第二個activity 93
6.1 創(chuàng)建第二個activity 94
6.1.1 創(chuàng)建新的activity 95
6.1.2 創(chuàng)建新的activity子類 98
6.1.3 在manifest配置文件中聲明activity 98
6.1.4 為MainActivity添加CHEAT!按鈕 99
6.2 啟動activity 100
6.3 activity間的數(shù)據(jù)傳遞 102
6.3.1 使用intent extra 102
6.3.2 從子activity 獲取返回結(jié)果 105
6.4 activity的使用與管理 110
6.5 挑戰(zhàn)練習(xí):堵住作弊漏洞 112
6.6 挑戰(zhàn)練習(xí):按題記錄作弊狀態(tài) 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目標(biāo)版本 116
7.2.4 SDK編譯版本 116
7.2.5 安全添加新版本API中的代碼 116
7.2.6 JETPACK庫 119
7.3 使用Android開發(fā)者文檔 120
7.4 挑戰(zhàn)練習(xí):報告編譯版本 122
7.5 挑戰(zhàn)練習(xí):限制作弊次數(shù) 122
第 8 章 UI fragment與fragment管理器 123
8.1 UI設(shè)計的靈活性需求 124
8.2 引入fragment 124
8.3 著手開發(fā)CriminalIntent 125
8.4 創(chuàng)建Crime數(shù)據(jù)類 128
8.5 創(chuàng)建UI fragment 129
8.5.1 定義CrimeFragment的布局 129
8.5.2 創(chuàng)建CrimeFragment類 131
8.6 托管UI fragment 137
8.6.1 定義容器視圖 138
8.6.2 向FragmentManager中添加UI fragment 139
8.7 采用fragment的應(yīng)用架構(gòu) 143
第 9 章 使用RecyclerView顯示列表 145
9.1 添加新Fragment和ViewModel 146
9.2 添加RecyclerView 149
9.3 創(chuàng)建列表項(xiàng)視圖布局 151
9.4 ViewHolder實(shí)現(xiàn) 153
9.5 使用Adapter填充RecyclerView 155
9.6 循環(huán)使用視圖 159
9.7 清理綁定 159
9.8 響應(yīng)點(diǎn)擊 160
9.9 深入學(xué)習(xí):ListView與GridView 161
9.10 挑戰(zhàn)練習(xí):RecyclerView的ViewType 162
第 10 章 使用布局與部件創(chuàng)建用戶界面 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 動態(tài)設(shè)置列表項(xiàng) 179
10.4 深入學(xué)習(xí)布局屬性 180
10.5 深入學(xué)習(xí):邊距與內(nèi)邊距 182
10.6 深入學(xué)習(xí):ConstraintLayout的發(fā)展動態(tài) 183
10.7 挑戰(zhàn)練習(xí):日期格式化 183
第 11 章 數(shù)據(jù)庫與Room庫 185
11.1 Room架構(gòu)組建庫 186
11.2 創(chuàng)建數(shù)據(jù)庫 187
11.2.1 定義實(shí)體 187
11.2.2 創(chuàng)建數(shù)據(jù)庫類 187
11.3 定義數(shù)據(jù)庫訪問對象 189
11.4 使用倉庫模式訪問數(shù)據(jù)庫 191
11.5 測試數(shù)據(jù)庫訪問 193
11.6 應(yīng)用線程 196
11.7 使用LiveData 198
11.8 挑戰(zhàn)練習(xí):解決Schema警告 203
11.9 深入學(xué)習(xí):單例 204
第 12 章 Fragment Navigation 206
12.1 單Activity多Fragment 206
12.1.1 Fragment回調(diào)接口 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數(shù)據(jù)轉(zhuǎn)換 214
12.4 更新數(shù)據(jù)庫 217
12.4.1 使用executor 218
12.4.2 數(shù)據(jù)庫寫入與fragment生命周期 219
12.5 深入學(xué)習(xí):為何要用Fragment Argument 220
12.6 深入學(xué)習(xí):Navigation架構(gòu)組件庫 221
12.7 挑戰(zhàn)練習(xí):實(shí)現(xiàn)高效的RecyclerView刷新 222
第 13 章 對話框 223
13.1 創(chuàng)建DialogFragment 224
13.2 fragment間的數(shù)據(jù)傳遞 227
13.2.1 傳遞數(shù)據(jù)給DatePickerFragment 228
13.2.2 返回數(shù)據(jù)給CrimeFragment 230
13.3 挑戰(zhàn)練習(xí):時間選擇對話框 232
第 14 章 應(yīng)用欄 233
14.1 AppCompat默認(rèn)應(yīng)用欄 234
14.2 應(yīng)用欄菜單 235
14.2.1 在XML文件中定義菜單 235
14.2.2 創(chuàng)建菜單 237
14.2.3 響應(yīng)菜單項(xiàng)選擇 240
14.3 使用Android Asset Studio 242
14.4 深入學(xué)習(xí):應(yīng)用欄、操作欄與工具欄 244
14.5 深入學(xué)習(xí):AppCompat版應(yīng)用欄 246
14.6 挑戰(zhàn)練習(xí):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 發(fā)送消息 253
15.4.3 獲取聯(lián)系人信息 256
15.4.4 檢查可響應(yīng)任務(wù)的activity 261
15.5 挑戰(zhàn)練習(xí):又一個隱式intent 263
第 16 章 使用intent拍照 264
16.1 布置照片 264
16.2 文件存儲 267
16.2.1 使用FileProvider 268
16.2.2 指定照片存放位置 269
16.3 使用相機(jī)intent 270
16.4 縮放和顯示位圖 273
16.5 功能聲明 277
16.6 挑戰(zhàn)練習(xí):優(yōu)化照片顯示 278
16.7 挑戰(zhàn)練習(xí):優(yōu)化縮略圖加載 278
第 17 章 應(yīng)用本地化 279
17.1 資源本地化 279
17.1.1 默認(rèn)資源 282
17.1.2 檢查資源本地化完成情況 283
17.1.3 區(qū)域修飾符 284
17.2 配置修飾符 285
17.2.1 可用資源優(yōu)先級排定 286
17.2.2 多重配置修飾符 288
17.2.3 尋找最匹配的資源 289
17.3 測試備選資源 290
17.4 深入學(xué)習(xí):確定設(shè)備屏幕尺寸 290
17.5 挑戰(zhàn)練習(xí):日期顯示本地化 291
第 18 章 Android輔助功能 292
18.1 TalkBack 292
18.1.1 點(diǎn)擊瀏覽 294
18.1.2 線性瀏覽 295
18.2 實(shí)現(xiàn)非文字型元素可讀 297
18.2.1 添加內(nèi)容描述 297
18.2.2 實(shí)現(xiàn)部件可聚焦 300
18.3 提升輔助體驗(yàn) 301
18.4 深入學(xué)習(xí):使用輔助功能掃描器 302
18.5 挑戰(zhàn)練習(xí):優(yōu)化列表項(xiàng) 305
18.6 挑戰(zhàn)練習(xí):補(bǔ)全上下文信息 305
18.7 挑戰(zhàn)練習(xí):事件主動通知 306
第 19 章 數(shù)據(jù)綁定與MVVM 307
19.1 為何要用MVVM架構(gòu) 308
19.2 MVVM View Model與Jetpack ViewModel 308
19.3 創(chuàng)建BeatBox應(yīng)用 308
19.4 實(shí)現(xiàn)簡單的數(shù)據(jù)綁定 309
19.5 導(dǎo)入assets 312
19.6 處理assets 314
19.7 使用assets 316
19.8 綁定數(shù)據(jù) 318
19.8.1 創(chuàng)建視圖模型 320
19.8.2 綁定至視圖模型 321
19.8.3 綁定數(shù)據(jù)觀察 323
19.9 深入學(xué)習(xí):數(shù)據(jù)綁定再探 325
19.9.1 lambda表達(dá)式 325
19.9.2 更多語法糖 326
19.9.3 BindingAdapter 326
19.10 深入學(xué)習(xí):LiveData和數(shù)據(jù)綁定 327
第 20 章 音頻播放與單元測試 329
20.1 創(chuàng)建SoundPool 329
20.2 訪問Assets 330
20.3 加載音頻文件 330
20.4 播放音頻 332
20.5 測試依賴 332
20.6 創(chuàng)建測試類 333
20.7 配置測試類 335
20.8 編寫測試函數(shù) 336
20.9 數(shù)據(jù)綁定回調(diào) 341
20.10 釋放音頻 342
20.11 深入學(xué)習(xí):整合測試 343
20.12 深入學(xué)習(xí):模擬對象與測試 344
20.13 挑戰(zhàn)練習(xí):播放進(jìn)度控制 345
20.14 挑戰(zhàn)練習(xí):設(shè)備旋轉(zhuǎn)問題 346
第 21 章 樣式與主題 347
21.1 顏色資源 348
21.2 樣式 348
21.3 主題 351
21.4 添加主題顏色 353
21.5 覆蓋主題屬性 354
21.6 修改按鈕屬性 358
21.7 深入學(xué)習(xí):樣式繼承拾遺 361
21.8 深入學(xué)習(xí):引用主題屬性 362
第 22 章 XML drawable 363
22.1 統(tǒng)一按鈕樣式 364
22.2 shape drawable 365
22.3 state list drawable 367
22.4 layer list drawable 368
22.5 深入學(xué)習(xí):為什么要用XML drawable 370
22.6 深入學(xué)習(xí):使用mipmap圖像 370
22.7 深入學(xué)習(xí):使用9-patch圖像 371
22.8 挑戰(zhàn)練習(xí):按鈕主題 377
第 23 章 深入學(xué)習(xí)intent和任務(wù) 378
23.1 創(chuàng)建NerdLauncher項(xiàng)目 379
23.2 解析隱式intent 380
23.3 在運(yùn)行時創(chuàng)建顯式intent 385
23.4 任務(wù)與回退!386
23.4.1 在任務(wù)間切換 387
23.4.2 啟動新任務(wù) 388
23.5 用NerdLauncher當(dāng)主屏幕 391
23.6 深入學(xué)習(xí):進(jìn)程與任務(wù) 392
23.7 深入學(xué)習(xí):并發(fā)文檔 394
23.8 挑戰(zhàn)練習(xí):應(yīng)用圖標(biāo) 397
第 24 章 HTTP 與后臺任務(wù) 398
24.1 創(chuàng)建PhotoGallery應(yīng)用 399
24.2 Retrofit網(wǎng)絡(luò)連接基本 402
24.2.1 定義Retrofit API接口 403
24.2.2 構(gòu)建Retrofit對象并創(chuàng)建API實(shí)例 403
24.2.3 執(zhí)行網(wǎng)絡(luò)請求 405
24.2.4 獲取網(wǎng)絡(luò)使用權(quán)限 407
24.2.5 使用倉庫模式聯(lián)網(wǎng) 408
24.3 從Flickr 獲取JSON數(shù)據(jù) 411
24.4 應(yīng)對設(shè)備配置改變 418
24.5 在RecyclerView里顯示結(jié)果 421
24.6 深入學(xué)習(xí):其他JSON數(shù)據(jù)解析器和數(shù)據(jù)格式 423
24.7 深入學(xué)習(xí):撤銷網(wǎng)絡(luò)請求 423
24.8 深入學(xué)習(xí):管理依賴 424
24.9 挑戰(zhàn)練習(xí):自定義Gson反序列化器 425
24.10 挑戰(zhàn)練習(xí):分頁 426
24.11 挑戰(zhàn)練習(xí):動態(tài)調(diào)整網(wǎng)格列 426
第 25 章 Looper、Handler和HandlerThread 427
25.1 配置RecyclerView以顯示圖片 427
25.2 準(zhǔn)備下載數(shù)據(jù) 430
25.3 批量下載縮略圖 431
25.4 創(chuàng)建后臺線程 431
25.4.1 創(chuàng)建生命周期感知線程 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 設(shè)備旋轉(zhuǎn)與保留fragment 450
25.7.2 是否保留fragment 452
25.8 深入學(xué)習(xí):解決圖片下載問題 452
25.9 深入學(xué)習(xí):StrictMode 453
25.10 挑戰(zhàn)練習(xí):觀察視圖LifecycleOwner的LiveData 454
25.11 挑戰(zhàn)練習(xí):優(yōu)化ThumbnailDownloader 454
25.12 挑戰(zhàn)練習(xí):預(yù)加載以及緩存 454
第 26 章 搜索 456
26.1 搜索Flickr網(wǎng)站 457
26.2 使用SearchView 460
26.3 使用sharedpreferences實(shí)現(xiàn)輕量級數(shù)據(jù)存儲 464
26.4 優(yōu)化應(yīng)用 467
26.5 用Android KTX編輯SharedPreferences 468
26.6 挑戰(zhàn)練習(xí):優(yōu)化PhotoGallery應(yīng)用 469
第 27 章 WorkManager 470
27.1 創(chuàng)建Worker類 470
27.2 調(diào)度工作 471
27.3 檢查新圖片 473
27.4 通知用戶 476
27.5 服務(wù)的用戶控制 481
第 28 章 broadcast intent 486
28.1 普通intent與broadcast intent 486
28.2 過濾前臺通知 487
28.2.1 發(fā)送broadcast intent 487
28.2.2 創(chuàng)建并登記standalone receiver 488
28.2.3 使用私有權(quán)限限制broadcast 489
28.2.4 創(chuàng)建并登記動態(tài)receiver 491
28.2.5 使用有序broadcast收發(fā)數(shù)據(jù) 493
28.3 receiver與長時運(yùn)行任務(wù) 497
28.4 深入學(xué)習(xí):本地事件 497
28.4.1 使用EventBus 498
28.4.2 使用RxJava 499
28.5 深入學(xué)習(xí):受限的Broadcast Receiver 499
28.6 深入學(xué)習(xí):探測fragment的狀態(tài) 500
第 29 章 網(wǎng)頁瀏覽 501
29.1 最后一段Flickr數(shù)據(jù) 501
29.2 簡單方式:使用隱式intent 503
29.3 較難的方式:使用WebView 504
29.4 處理WebView的設(shè)備旋轉(zhuǎn)問題 511
29.5 WebView與定制UI 512
29.6 深入學(xué)習(xí):注入JavaScript對象 512
29.7 深入學(xué)習(xí):WebView升級 513
29.8 深入學(xué)習(xí):Chrome Custom Tabs 513
29.9 挑戰(zhàn)練習(xí):使用回退鍵瀏覽歷史網(wǎng)頁 514
第 30 章 定制視圖與觸摸事件 515
30.1 創(chuàng)建DragAndDraw項(xiàng)目 515
30.2 創(chuàng)建定制視圖 516
30.3 處理觸摸事件 518
30.4 onDraw(Canvas)函數(shù)內(nèi)的圖形繪制 521
30.5 深入學(xué)習(xí):GestureDetector 523
30.6 挑戰(zhàn)練習(xí):設(shè)備旋轉(zhuǎn)問題 523
30.7 挑戰(zhàn)練習(xí):旋轉(zhuǎn)矩形框 524
30.8 挑戰(zhàn)練習(xí):輔助功能支持 524
第 31 章 屬性動畫 525
31.1 建立場景 525
31.2 簡單屬性動畫 527
31.2.1 視圖轉(zhuǎn)換屬性 530
31.2.2 使用不同的interpolator 531
31.2.3 色彩漸變 532
31.3 播放多個動畫 534
31.4 深入學(xué)習(xí):其他動畫API 536
31.4.1 傳統(tǒng)動畫工具 536
31.4.2 轉(zhuǎn)場 536
31.5 挑戰(zhàn)練習(xí) 536
第 32 章 編后語 537
32.1 終極挑戰(zhàn) 537
32.2 插個廣告 537
32.3 致謝 538
你還可能感興趣
我要評論
|