第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