第Ⅰ部分 反应式核心编程
第1章 反应式编程简介 3
1.1 你阅读本书的原因 3
1.2 不要阅读本书的情形 4
1.3 OOP、Rx、FP和FRP 5
1.3.1 OOP,面向对象编程 5
1.3.2 FP,函数式编程 5
1.3.3 FRP,函数反应式编程 5
1.3.4 Rx,反应式编程 5
1.4 Rx的特征 5
1.5 编写的代码就是所实现的功能 6
1.5.1 灰色代码 7
1.5.2 反应式编程开发 7
1.6 反应式总览 8
1.6.1 移动开发 8
1.6.2 Web和HTML5 9
1.6.3 后端系统和Rx 9
1.7 在开始学习之前你需要知道什么 10
1.7.1 你需要具备的条件 10
1.7.2 你不需要具备的条件 10
1.8 关于本书 10
1.8.1 在线代码示例 10
1.8.2 茶歇 11
1.9 RxJava 2和Android 11
1.9.1 为什么选择Java 11
1.9.2 为什么选择RxJava 11
1.10 设置Android环境 12
1.10.1 Google Android Studio 12
1.10.2 Git 12
1.10.3 RxJava 2依赖项 12
1.11 Java 8 lambda 12
1.11.1 什么是lambda函数 13
1.11.2 剖析lambda函数 13
1.11.3 lambda函数有什么优点 14
1.12 深入研究Rx:实时搜索 14
1.13 项目设置 15
1.13.1 一种快速实现 15
1.13.2 基于时间筛选文本更改 15
1.14 作为数据的emitter的文本输入 15
1.15 发布-订阅模式 16
1.16 作为observable的文本输入 17
1.17 筛选observable 18
1.17.1 .filter操作符 19
1.17.2 observable和subscriber的时间解耦 20
1.18 时间延迟 20
1.19 延迟时间的优势 21
1.20 debounce操作符 21
1.21 将代码放入Android系统中 23
1.22 反应式编程的原理 25
1.23 事件和弹珠图 26
1.24 本章小结 26
第2章 连接observable 29
2.1 RxJava和事件流 29
2.2 subscriber 30
2.3 RxJava 2 observable的类型 31
2.3.1 Observable 31
2.3.2 Single 31
2.3.3 Maybe 31
2.3.4 Completable 31
2.3.5 Flowable 32
2.4 订阅并转换不同的observable 32
2.5 当发出正常的网络请求时会发生什么 32
2.6 当observable发出网络请求时会发生什么 33
2.7 网络请求作为observable 34
2.8 示例:RSS提要聚合器 35
2.9 提要结构 36
2.10 获取数据 37
2.11 combineLatest操作符 37
2.12 到目前为止的Rx代码 38
2.13 异步数据处理链 40
2.14 按顺序排列列表 42
2.15 .map操作符 42
2.15.1 操作符的有效期 43
2.15.2 使用.map对列表进行排序 43
2.16 不变性简介 45
2.16.1 不具有不变性的链 46
2.16.2 具有不可变数据的链 46
2.16.3 使用不变性解决问题 47
2.16.4 Java中的builder 47
2.17 错误处理 48
2.17.1 网络错误及其处理 49
2.17.2 当真正的错误出现时,该怎么办 50
2.18 向客户端添加更多提要 51
2.18.1 提要observable列表 51
2.18.2 细说combineLatest 51
2.18.3 有多个弹珠的combineLatest 52
2.19 本章小结 53
2.19.1 未来展望 53
2.19.2 从事件到反应式状态 53
第3章 建立数据处理链 55
3.1 observable的不同角色 55
3.1.1 observable事件 55
3.1.2 反应变量 56
3.1.3 篮子中橘子的数量 56
3.2 事件与反应状态 57
3.2.1 observable的click事件 57
3.2.2 开关按钮 57
3.2.3 将事件转换为状态 57
3.2.4 作为反应变量的observable 58
3.3 observable的内部状态 58
3.4 箭头图和不同的observable类型 59
3.5 示例:信用卡验证表单 60
3.5.1 信用卡验证器 60
3.5.2 布局 60
3.5.3 信用卡卡号的工作原理 61
3.5.4 按步骤验证数字 62
3.5.5 输入 62
3.5.6 输出 62
3.5.7 解方程式 63
3.6 第一步:有效期 63
3.7 信用卡卡号类型和校验和 65
3.7.1 卡类型 65
3.7.2 检查已知的CardType 67
3.7.3 计算校验和 67
3.7.4 信用卡卡号输入验证的大图 68
3.8 CVC代码验证 68
3.9 融会贯通 70
3.9.1 登录FRP链 71
3.9.2 完整图 71
3.10 反应式编程的抽象层次 72
3.11 RxJava的工作原理 74
3.12 本章小结 75
3.12.1 反应图的优点 75
3.12.2 表单改进 75
第4章 通过网络连接用户界面 77
4.1 订阅解释 77
4.2 终止订阅 79
4.2.1 已经完成的observable信号 79
4.2.2 Disposable对象用于取消订阅 80
4.3 RxJava 2概念和订阅管理 81
4.3.1 新subscribe函数签名 81
4.3.2 subscribe函数重载 81
4.3.3 作为subscriber的基本consumer接口 82
4.3.4 LambdaObserver 82
4.4 高级Rx链示例:Flickr搜索客户端 82
4.5 设置Flickr客户端项目 83
4.5.1 申请API密钥 83
4.5.2 将API放到gradle.properties中 84
4.6 搜索链概述 84
4.7 步骤1:简单的硬编码搜索 85
4.7.1 搜索API返回的数据类型 86
4.7.2 搜索并呈现 86
4.7.3 到目前为止已实现的功能 86
4.8 click事件 87
4.8.1 使用onClickListener触发搜索 87
4.8.2 使用订阅 88
4.8.3 管理订阅 88
4.8.4 流式方法 88
4.9 实现反应链 90
4.9.1 连通数据图 91
4.9.2 启动链中的异步操作 92
4.10 switchMap的工作原理 92
4.11 获取缩略图信息 94
4.12 步骤1:将列表扩展为一个observable 95
4.12.1 flatMap操作符 95
4.12.2 Observable.merge 95
4.12.3 在嵌套的observable中使用merge 96
4.12.4 flatMap 97
4.12.5 使用flatMap扩展列表 97
4.12.6 代码中的内容 97
4.13 步骤2: 分别对每一项应用操作 98
4.14 步骤3:收集结果 98
4.15 完整的解决方案 99
4.15.1 图中间的关键代码 100
4.15.2 组合代码 100
4.16 添加来自其他API的用户名 101
4.17 本章小结 102
第5章 高级RxJava 105
5.1 深入了解observable和subject 105
5.2 示例:文件浏览器 106
5.3 文件浏览器应用的用户流 107
5.4 获取目录的文件列表 108
5.4.1 返回目录内容列表的函数 109
5.4.2 Android权限 109
5.4.3 使用Observable.create创建自定义observable 109
5.4.4 将文件listing函数封装到FileListingObservable中 110
5.4.5 文件列表observable的生命周期 111
5.5 线程基础 112
5.5.1 什么是线程 112
5.5.2 尚未解决的问题 113
5.5.3 具有输入和输出功能的函数 113
5.6 函数式编程中的线程 114
5.6.1 反应式函数链 114
5.6.2 显示有副作用的结果 115
5.7 使用getFileListingObservable更改线程 115
5.7.1 线程更改 115
5.7.2 使用observeOn更改线程 116
5.7.3 使用subscribeOn更改线程 117
5.7.4 在代码中使用subscribeOn 118
5.8 使文件列表动态化 118
5.8.1 切换到fileObservable作为源 119
5.8.2 形成完整的链 119
5.8.3 Observable.just 119
5.9 列表click事件 120
5.10 subject的不同类型 121
5.10.1 PublishSubject 122
5.10.2 BehaviorSubject 122
5.11 使用subject作为FileObservable 123
5.12 添加PREVIOUS和ROOT按钮 126
5.13 PREVIOUS和ROOT的扩展图 126
5.13.1 对两个新按钮进行编码 127
5.13.2 第一个版本准备好了 128
5.14 更清晰observable的改进版本 128
5.15 PREVIOUS按钮 129
5.16 融会贯通 130
5.17 详细图 131
5.18 到目前为止的完整代码 131
5.19 保存并释放订阅 133
5.20 关于subject的最后说明 135
5.21 本章小结 136
第Ⅱ部分 RxJava中的架构
第6章 反应式视图模型 141
6.1 视图层 141
6.1.1 视图 142
6.1.2 视图和文件浏览器 142
6.2 平台容器 143
6.2.1 平台容器的特征 143
6.2.2 平台容器的生命周期 143
6.3 视图模型 144
6.4 视图模型的蓝图 146
6.4.1 视图模型的特征 147
6.4.2 将现有代码迁移到视图模型中 147
6.4.3 获取视图模型中的外部数据 148
6.4.4 视图模型的完整构造函数 149
6.5 连接视图和视图模型 150
6.5.1 设置视图和视图模型 150
6.5.2 显示视图模型的输出 151
6.5.3 将视图模型绑定到视图 151
6.6 全貌 153
6.7 视图模型生命周期 154
6.7.1 在视图模型中保存订阅 154
6.7.2 视图模型的代码 154
6.8 视图模型和Android生命周期 157
6.8.1 视图模型Subscribe/Unsubscribe 157
6.8.2 视图模型到视图绑定 157
6.8.3 改进的视图模型生命周期 158
6.8.4 全貌 158
6.8.5 Android 上的视图模型阶段 159
6.8.6 onResume和onPause的代码 160
6.9 代码的视图关联性 161
6.10 本章小结 162
第7章 反应式架构 163
7.1 反应式架构基础 163
7.2 模型-视图-视图模型 164
7.2.1 拆分类 164
7.2.2 模型的内部关系 165
7.2.3 所说的数据库是真实的数据库吗 165
7.3 反应模型 166
7.3.1 作为实体存储库的Web服务器 166
7.3.2 Web请求流程 166
· · · · · · (
收起)
还没人写过短评呢