本書講解的是 Android Jetpack 最核心的內容——架構。第 1 章將對 Jetpack 做一個大致的介紹。第 2 章至第 9 章,將分別詳細介紹為搭建 MVVM 架構而設計的各個 Jetpack 組件,包括LiveData、 ViewModel、 DataBinding 等。第 10 章是對前面各章節的總結,將向讀者詳細介紹什么是數據模型驅動界面更新、 什么是 MVVM 架構, 以及如何利用 Jetpack 組件搭建符合 MVVM架構規范的應用程序。本書假設讀者對 Android 應用程序有基本的了解,希望系統學習 Jetpack,并打算最終使用Jetpack 組件架構符合 MVVM 規范的應用程序。
葉坤,畢業于閩南師范大學計算機系。曾先后就職于網龍、搜狐暢游17173、豆瓣。在豆瓣任職期間,負責豆瓣FM Android客戶端的研發工作。現為美餐網資深Android工程師,負責美餐行星項目Android客戶端的研發工作。他在大學期間便開始自學Android研發技術,從事Android研發已有10年,在該領域有較為豐富的經驗,曾譯《Android高性能編程》一書。除了碼字,他還十分喜愛阿根廷探戈。
第1章 初識Jetpack 1
1.1 Android應用程序架構設計標準的缺失概論 1
1.2 什么是Jetpack 2
1.3 Jetpack與AndroidX 3
1.4 遷移至AndroidX 4
1.5 新建項目默認支持AndroidX 6
1.6 總結 8
第2章 LifeCycle 9
2.1 LifeCycle的誕生 9
2.2 使用LifeCycle解耦頁面與組件 10
2.2.1 案例分析 10
2.2.2 LifeCycle的原理 11
2.2.3 解決方案 12
2.3 使用LifecycleService解耦Service與組件 15
2.3.1 LifeCycleService基本介紹 15
2.3.2 LifecycleService的具體使用方法 16
2.4 使用ProcessLifecycleOwner監聽應用程序的生命周期 19
2.4.1 ProcessLifecycleOwner存在的意義 19
2.4.2 ProcessLifecycleOwner的具體使用方法 19
2.5 總結 22
第3章 Navigation 24
3.1 Navigation的誕生 24
3.2 Navigation的主要元素 25
3.3 使用Navigation 26
3.3.1 創建Navigation Graph 26
3.3.2 添加NavHostFragment 28
3.3.3 創建destination 30
3.3.4 完成Fragment頁面切換 33
3.3.5 使用NavController完成導航 36
3.3.6 添加頁面切換動畫效果 38
3.4 使用safe args插件傳遞參數 40
3.4.1 常見的傳遞參數的方式 40
3.4.2 使用safe args傳遞參數 40
3.5 NavigationUI的使用方法 43
3.5.1 NavigationUI存在的意義 43
3.5.2 案例分析 43
3.5.3 擴展延伸 48
3.6 深層鏈接DeepLink 49
3.6.1 DeepLink的兩種應用場景 49
3.6.2 PendingIntent的方式 50
3.6.3 URL的方式 52
3.7 總結 54
第4章 ViewModel 56
4.1 視圖與數據模型之間的橋梁ViewModel 56
4.2 ViewModel的生命周期特性 57
4.3 ViewModel的基本使用方法 58
4.4 ViewModel的原理 62
4.5 ViewModel與AndroidViewModel 64
4.6 ViewModel與onSaveInstanceState() 方法 65
4.7 總結 65
第5章 LiveData 67
5.1 實時數據LiveData 67
5.2 LiveData和ViewModel的關系 68
5.3 LiveData的基本使用方法 68
5.4 LiveData的原理 71
5.5 LiveData.observeForever()方法 72
5.6 ViewModel+LiveData實現Fragment間通信 73
5.7 總結 79
第6章 Room 80
6.1 Android官方ORM庫Room 80
6.2 Room的基本使用方法 81
6.2.1 Room的相關概念 81
6.2.2 案例分析 82
6.3 Room與LiveData、ViewModel結合使用 87
6.3.1 LiveData和ViewModel帶來的好處 87
6.3.2 案例優化 89
6.4 Room數據庫升級 91
6.4.1 使用Migration升級數據庫 91
6.4.2 異常處理 92
6.4.3 Schema文件 93
6.4.4 銷毀與重建策略 95
6.5 預填充數據庫 96
6.5.1 createFromAsset() API和createFromFile() API 96
6.5.2 createFromAsset() API的使用方法 97
6.6 總結 101
第7章 WorkManager 102
7.1 WorkManager的作用 102
7.2 WorkManager的3個重要特點 102
7.3 WorkManager的兼容方案 103
7.4 WorkManager的基本使用方法 104
7.4.1 添加依賴 104
7.4.2 使用Worker類定義任務 104
7.4.3 使用WorkRequest配置任務 105
7.4.4 將任務提交給系統 107
7.4.5 觀察任務的狀態 107
7.4.6 取消任務 108
7.4.7 WorkManager與Worker之間的參數傳遞 108
7.4.8 周期性任務PeriodicWorkRequest 110
7.4.9 任務鏈 110
7.5 總結 112
第8章 DataBinding 113
8.1 DataBinding的意義和優勢 113
8.2 DataBinding的簡單綁定 114
8.2.1 未采用DataBinding的編碼方式 114
8.2.2 采用DataBinding完成簡單的綁定 116
8.3 DataBinding響應事件 124
8.4 二級頁面的綁定 127
8.5 BindingAdapter的原理 130
8.6 自定義BindingAdapter 132
8.6.1 自定義BindingAdapter的基本方法 132
8.6.2 方法重載 135
8.6.3 多參數重載 137
8.6.4 可選舊值 138
8.7 雙向綁定 141
8.7.1 單向綁定和雙向綁定 141
8.7.2 實現雙向綁定 142
8.7.3 使用ObservableField優化雙向綁定 145
8.7.4 ObservableField與LiveData 146
8.8 RecyclerView的綁定機制 147
8.9 總結 154
第9章 Paging 155
9.1 Paging組件的意義 155
9.2 Paging支持的架構類型 155
9.3 Paging的工作原理 157
9.4 Paging的3個核心類 158
9.5 3種DataSource 159
9.6 PositionalDataSource的使用方法 160
9.7 PageKeyedDataSource的使用方法 176
9.8 ItemKeyedDataSource的使用方法 184
9.9 BoundaryCallback的使用方法 190
9.9.1 BoundaryCallback的意義 190
9.9.2 BoundaryCallback的使用流程分析 191
9.9.3 項目演示 192
9.10 總結 202
第10章 MVVM架構 204
10.1 MVVM架構與Jetpack 204
10.2 數據模型驅動界面更新 204
10.3 簡要回顧Jetpack組件 206
10.4 使用Jetpack組件構建MVVM應用程序 207
10.5 總結 224