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

Kristin Marsicano,Brian Gardner,Bill Phillips

立即出貨 (庫存 < 3)

  • 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