內容簡介
《第一行代碼 Android 第3版》被Android開發者譽為“Android學習第一書”。全書系統全面、循序漸進地介紹了Android軟體開發的必備知識、經驗和技巧。
《第一行代碼 Android 第3版》基於Android 10.0對第2版進行了全面更新,不僅將所有知識點都在Android 10.0系統上進行了重新適配,同時加入Kotlin語言的全面講解,使用Kotlin對全書代碼進行重寫,而且還介紹了新系統特性以及Jetpack架構組件的使用,使本書更加實用。
《第一行代碼 Android 第3版》內容通俗易懂,由淺入深,既是Android初學者的入門必備,也是Android開發者的進階首要選擇。
目錄
第 1章 開始啟程——你的第 一行
Android代碼 1
1.1 了解全貌,Android王國簡介 2
1.1.1 Android系統架構 2
1.1.2 Android已發布的版本 3
1.1.3 Android套用開發特色 4
1.2 手把手帶你搭建開發環境 5
1.2.1 準備所需要的工具 5
1.2.2 搭建開發環境 5
1.3 創建你的第 一個Android項目 9
1.3.1 創建HelloWorld項目 9
1.3.2 啟動模擬器 11
1.3.3 運行HelloWorld 14
1.3.4 分析你的第 一個Android程式 15
1.3.5 詳解項目中的資源 20
1.3.6 詳解build.gradle檔案 22
1.4 前行必備:掌握日誌工具的使用 25
1.4.1 使用Android的日誌工具Log 25
1.4.2 為什麼使用Log而不使用println 26
1.5 小結與點評 28
第2章 探究新語言,快速入門Kotlin編程 30
2.1 Kotlin語言簡介 31
2.2 如何運行Kotlin代碼 32
2.3 編程之本:變數和函式 35
2.3.1 變數 35
2.3.2 函式 37
2.4 程式的邏輯控制 41
2.4.1 if條件語句 41
2.4.2 when條件語句 42
2.4.3 循環語句 45
2.5 面向對象編程 48
2.5.1 類與對象 49
2.5.2 繼承與構造函式 50
2.5.3 接口 55
2.5.4 數據類與單例類 58
2.6 Lambda編程 61
2.6.1 集合的創建與遍歷 61
2.6.2 集合的函式式API 65
2.6.3 Java函式式API的使用 69
2.7 空指針檢查 71
2.7.1 可空類型系統 72
2.7.2 判空輔助工具 73
2.8 Kotlin中的小魔術 77
2.8.1 字元串內嵌表達式 77
2.8.2 函式的參數默認值 78
2.9 小結與點評 81
第3章 先從看得到的入手,探究Activity 82
3.1 Activity是什麼 82
3.2 Activity的基本用法 82
3.2.1 手動創建Activity 83
3.2.2 創建和載入布局 85
3.2.3 在AndroidManifest檔案中註冊 88
3.2.4 在Activity中使用Toast 90
3.2.5 在Activity中使用Menu 92
3.2.6 銷毀一個Activity 96
3.3 使用Intent在Activity之間穿梭 96
3.3.1 使用顯式Intent 96
3.3.2 使用隱式Intent 99
3.3.3 更多隱式Intent的用法 101
3.3.4 向下一個Activity傳遞數據 105
3.3.5 返回數據給上一個Activity 106
3.4 Activity的生命周期 108
3.4.1 返回棧 108
3.4.2 Activity狀態 109
3.4.3 Activity的生存期 110
3.4.4 體驗Activity的生命周期 111
3.4.5 Activity被回收了怎么辦 117
3.5 Activity的啟動模式 118
3.5.1 standard 119
3.5.2 singleTop 120
3.5.3 singleTask 122
3.5.4 singleInstance 123
3.6 Activity的最佳實踐 126
3.6.1 知曉當前是在哪一個Activity 126
3.6.2 隨時隨地退出程式 127
3.6.3 啟動Activity的最佳寫法 129
3.7 Kotlin課堂:標準函式和靜態方法 130
3.7.1 標準函式with、run和apply 130
3.7.2 定義靜態方法 133
3.8 小結與點評 137
第4章 軟體也要拼臉蛋,UI開發的點點滴滴 138
4.1 該如何編寫程式界面 138
4.2 常用控制項的使用方法 139
4.2.1 TextView 139
4.2.2 Button 142
4.2.3 EditText 144
4.2.4 ImageView 149
4.2.5 ProgressBar 151
4.2.6 AlertDialog 154
4.3 詳解3種基本布局 156
4.3.1 LinearLayout 156
4.3.2 RelativeLayout 163
4.3.3 FrameLayout 166
4.4.1 引入布局 169
4.4.2 創建自定義控制項 172
4.5 最常用和最難用的控制項:ListView 174
4.5.1 ListView的簡單用法 174
4.5.2 定製ListView的界面 176
4.5.3 提升ListView的運行效率 179
4.5.4 ListView的點擊事件 180
4.6 更強大的滾動控制項:RecyclerView 182
4.6.1 RecyclerView的基本用法 183
4.6.2 實現橫向滾動和瀑布流布局 186
4.6.3 RecyclerView的點擊事件 191
4.7 編寫界面的最佳實踐 193
4.7.1 製作9-Patch圖片 193
4.7.2 編寫精美的聊天界面 196
4.8 Kotlin課堂:延遲初始化和密封類 201
4.8.1 對變數延遲初始化 201
4.8.2 使用密封類最佳化代碼 204
4.9 小結與點評 206
第5章 手機平板要兼顧,探究Fragment 207
5.1 Fragment是什麼 207
5.2 Fragment的使用方式 209
5.2.1 Fragment的簡單用法 210
5.2.2 動態添加Fragment 212
5.2.3 在Fragment中實現返回棧 215
5.2.4 Fragment和Activity之間的互動 216
5.3 Fragment的生命周期 217
5.3.1 Fragment的狀態和回調 217
5.3.2 體驗Fragment的生命周期 219
5.4 動態載入布局的技巧 221
5.4.1 使用限定符 221
5.4.2 使用最小寬度限定符 224
5.5 Fragment的最佳實踐:一個簡易版的新聞套用 225
5.6 Kotlin課堂:擴展函式和運算符重載 234
5.6.1 大有用途的擴展函式 234
5.7 小結與點評 240
第6章 全局大喇叭,詳解廣播機制 242
6.1 廣播機制簡介 242
6.2 接收系統廣播 243
6.2.1 動態註冊監聽時間變化 243
6.2.2 靜態註冊實現開機啟動 245
6.3 傳送自定義廣播 249
6.3.1 傳送標準廣播 249
6.3.2 傳送有序廣播 252
6.4 廣播的最佳實踐:實現強制下線功能 255
6.5 Kotlin課堂:高階函式詳解 261
6.5.1 定義高階函式 261
6.5.2 內聯函式的作用 265
6.5.3 noinline與crossinline 268
6.6 Git時間:初識版本控制工具 271
6.6.1 安裝Git 271
6.6.2 創建代碼倉庫 272
6.6.3 提交本地代碼 274
6.7 小結與點評 274
第7章 數據存儲全方案,詳解持久化技術 275
7.1 持久化技術簡介 275
7.2 檔案存儲 276
7.2.1 將數據存儲到檔案中 276
7.2.2 從檔案中讀取數據 279
7.3 SharedPreferences存儲 281
7.3.1 將數據存儲到SharedPre-ferences中 282
7.3.2 從SharedPreferences中讀取數據 284
7.3.3 實現記住密碼功能 285
7.4 SQLite資料庫存儲 288
7.4.1 創建資料庫 289
7.4.2 升級資料庫 295
7.4.3 添加數據 297
7.4.4 更新數據 300
7.4.5 刪除數據 302
7.4.6 查詢數據 304
7.4.7 使用SQL運算元據庫 307
7.5 SQLite資料庫的最佳實踐 307
7.5.1 使用事務 308
7.5.2 升級資料庫的最佳寫法 309
7.6 Kotlin課堂:高階函式的套用 312
7.6.1 簡化SharedPreferences的用法 312
7.6.2 簡化ContentValues的用法 314
7.7 小結與點評 317
第8章 跨程式共享數據,探究ContentProvider 318
8.1 ContentProvider簡介 318
8.2 運行時許可權 319
8.2.1 Android許可權機制詳解 319
8.2.2 在程式運行時申請許可權 322
8.3 訪問其他程式中的數據 326
8.3.1 ContentResolver的基本用法 326
8.3.2 讀取系統聯繫人 329
8.4 創建自己的ContentProvider 332
8.4.1 創建ContentProvider的步驟 332
8.4.2 實現跨程式數據共享 336
8.5 Kotlin課堂:泛型和委託 345
8.5.1 泛型的基本用法 345
8.5.2 類委託和委託屬性 347
8.5.3 實現一個自己的lazy函式 350
8.6 小結與點評 352
第9章 豐富你的程式,運用手機多媒體 353
9.1 將程式運行到手機上 353
9.2 使用通知 355
9.2.1 創建通知渠道 355
9.2.2 通知的基本用法 357
9.2.3 通知的進階技巧 362
9.3 調用攝像頭和相冊 367
9.3.1 調用攝像頭拍照 367
9.3.2 從相冊中選擇圖片 371
9.4 播放多媒體檔案 374
9.4.1 播放音頻 374
9.4.2 播放視頻 377
9.5 Kotlin課堂:使用infix函式構建更可讀的語法 381
9.6 Git時間:版本控制工具進階 383
9.6.1 忽略檔案 384
9.6.2 查看修改內容 385
9.6.3 撤銷未提交的修改 387
9.6.4 查看提交記錄 388
9.7 小結與點評 389
第 10章 後台默默的勞動者,探究Service 390
10.1 Service是什麼 390
10.2 Android多執行緒編程 391
10.2.1 執行緒的基本用法 391
10.2.2 在子執行緒中更新UI 392
10.2.3 解析異步訊息處理機制 395
10.2.4 使用AsyncTask 396
10.3 Service的基本用法 399
10.3.1 定義一個Service 399
10.3.2 啟動和停止Service 401
10.3.3 Activity和Service進行通信 404
10.4 Service的生命周期 408
10.5 Service的更多技巧 408
10.5.1 使用前台Service 409
10.5.2 使用IntentService 411
10.6 Kotlin課堂:泛型的高級特性 415
10.6.1 對泛型進行實化 415
10.6.2 泛型實化的套用 417
10.6.3 泛型的協變 418
10.6.3 泛型的逆變 422
10.7 小結與點評 425
第11章 看看精彩的世界,使用網路技術 427
11.1 WebView的用法 427
11.2 使用HTTP訪問網路 429
11.2.1 使用HttpURLConnection 430
11.2.2 使用OkHttp 433
11.3 解析XML格式數據 436
11.3.1 Pull解析方式 438
11.3.2 SAX解析方式 441
11.4 解析JSON格式數據 444
11.4.1 使用JSONObject 445
11.4.2 使用GSON 446
11.5 網路請求回調的實現方式 448
11.6 最好用的網路庫:Retrofit 451
11.6.1 Retrofit的基本用法 452
11.6.2 處理複雜的接口地址類型 456
11.6.3 Retrofit構建器的最佳寫法 459
11.7 Kotlin課堂:使用協程編寫高效的並發程式 461
11.7.1 協程的基本用法 461
11.7.2 更多的作用域構建器 467
11.7.3 使用協程簡化回調的寫法 471
11.8 小結與點評 474
第12章 最佳的UI體驗,MaterialDesign實戰 475
12.1 什麼是Material Design 475
12.2 Toolbar 476
12.3 滑動選單 483
12.3.1 DrawerLayout 483
12.3.2 NavigationView 486
12.4 懸浮按鈕和可互動提示 491
12.4.1 FloatingActionButton 491
12.4.2 Snackbar 494
12.4.3 CoordinatorLayout 496
12.5 卡片式布局 498
12.5.1 MaterialCardView 498
12.5.2 AppBarLayout 504
12.6 下拉刷新 507
12.7 可摺疊式標題欄 510
12.7.1 CollapsingToolbarLayout 510
12.7.2 充分利用系統狀態欄空間 519
12.8 Kotlin課堂:編寫好用的工具方法 522
12.8.1 求N個數的最大最小值 522
12.8.2 簡化Toast的用法 524
12.8.3 簡化Snackbar的用法 526
12.9 Git時間:版本控制工具的高級用法 528
12.9.1 分支的用法 528
12.9.2 與遠程版本庫協作 530
12.10 小結與點評 532
第13章 高級程式開發組件,探究Jetpack 533
13.1 Jetpack簡介 533
13.2 ViewModel 534
13.2.1 ViewModel的基本用法 536
13.2.2 向ViewModel傳遞參數 539
13.3 Lifecycles 541
13.4 LiveData 545
13.4.1 LiveData的基本用法 545
13.4.2 map和switchMap 549
13.5 Room 554
13.5.1 使用Room進行増刪改查 555
13.5.2 Room的資料庫升級 562
13.6 WorkManager 565
13.6.1 WorkManager的基本用法 566
13.6.2 使用WorkManager處理複雜的任務 568
13.7 Kotlin課堂:使用DSL構建專有的語法結構 571
13.8 小結與點評 577
第14章 繼續進階,你還應該掌握的高級技巧 579
14.1 全局獲取Context的技巧 579
14.2 使用Intent傳遞對象 582
14.2.1 Serializable方式 582
14.2.2 Parcelable方式 583
14.3 定製自己的日誌工具 584
14.4 調試Android程式 586
14.5 深色主題 589
14.6 Kotlin課堂:Java與Kotlin代碼之間的轉換 596
14.7 總結 600
第15章 進入實戰,開發一個天氣預報App 601
15.1 功能需求及技術可行性分析 601
15.2 Git時間:將代碼託管到GitHub上 605
15.3 搭建MVVM項目架構 612
15.4 搜尋全球城市數據 615
15.4.1 實現邏輯層代碼 615
15.4.2 實現UI層代碼 620
15.5 顯示天氣信息 626
15.5.1 實現邏輯層代碼 626
15.5.2 實現UI層代碼 631
15.5.3 記錄選中的城市 645
15.6 手動刷新天氣和切換城市 647
15.6.1 手動刷新天氣 648
15.6.2 切換城市 650
15.7 製作App的圖示 654
15.8 生成正式簽名的APK檔案 659
15.8.1 使用Android Studio生成 660
15.8.2 使用Gradle生成 663
15.9 你還可以做的事情 666
第16章 編寫並發布一個開源庫,PermissionX 669
16.1 開發前的準備工作 669
16.2 實現PermissionX開源庫 673
16.3 對開源庫進行測試 678
16.4 將開源庫發布到jcenter倉庫 681
16.5 體驗我們的成果 688
16.6 結束語 691