书籍详情

RxJava响应式编程

RxJava响应式编程

作者:李衍顺 著

出版社:电子工业出版社

出版时间:2018-03-01

ISBN:9787121336409

定价:¥49.00

购买这本书可以去
内容简介
  响应式编程是一种基于异步数据流概念的编程模式,在开发手机App、Web App时,要想保证对用户请求的实时响应,给用户带来流畅的体验,响应式编程是一个不错的选择。RxJava则是这种编程模式的Java实现。本书主要介绍如何使用RxJava进行响应式编程。全书一共6章,从响应式编程与RxJava的概念,到RxJava的操作符和源码,以及各种Scheduler的特点和适用场景,均做了较细致的讲解。本书还用一章的篇幅给出了几个RxJava的实用案例,帮助读者理解概念,上手操作。本书适合RxJava的初学者,以及对RxJava有初步了解想要进一步深入学习的读者阅读。
作者简介
  目前就职于Face++,多年的移动端开发和RxJava使用经验。
目录

第1章 走进RxJava的世界 .......................................................................................................... 1

1.1 响应式编程.......................................................................................................................... 1

1.2 什么是RxJava................................................................................................................ 4

1.3 Observable和Subscriber ............................................................................................... 5

1.3.1 Single:单个数据的生产者 ........................................................................................... 8

1.3.2 Completable:单个事件的生产者 .................................................................................. 9

1.4 在Android工程中引入RxJava .................................................................................. 11

第2章 RxJava中的操作符 ..................................................................................................... 12

2.1 创建Observable的操作符 .......................................................................................... 12

2.1.1 range ........................................................................................................................... 13

2.1.2 defer和just ................................................................................................................. 13

2.1.3 from ............................................................................................................................ 16

2.1.4 interval ........................................................................................................................ 17

2.1.5 repeat和timer ............................................................................................................. 19

2.2 转化Observable的操作符 .......................................................................................... 21

2.2.1 buffer .......................................................................................................................... 21

2.2.2 flatMap ....................................................................................................................... 23

2.2.3 groupBy ...................................................................................................................... 25

2.2.4 map............................................................................................................................ 28

2.2.5 cast ............................................................................................................................. 29

2.2.6 scan ............................................................................................................................ 31

2.2.7 window ....................................................................................................................... 32

2.3 过滤操作符 .................................................................................................................. 35

2.3.1 debounce ..................................................................................................................... 35

2.3.2 distinct ........................................................................................................................ 39

2.3.3 elementAt .................................................................................................................... 40

2.3.4 filter ............................................................................................................................ 41

2.3.5 first和last ................................................................................................................... 43

2.3.6 skip和take,skipLast和takeLast ................................................................................ 45

2.3.7 sample和throttleFirst .................................................................................................. 46

2.4 组合操作符 .................................................................................................................. 48

2.4.1 combineLatest .............................................................................................................. 48

2.4.2 join和groupJoin ......................................................................................................... 51

2.4.3 merge和mergeDelayError............................................................................................ 55

2.4.4 startWith...................................................................................................................... 58

2.4.5 switch ......................................................................................................................... 59

2.4.6 zip和zipWith .............................................................................................................. 61

2.5 错误处理操作符 .......................................................................................................... 64

2.5.1 onErrorReturn .............................................................................................................. 64

2.5.2 onErrorResumeNext ..................................................................................................... 66

2.5.3 onExceptionResumeNext .............................................................................................. 67

2.5.4 retry ............................................................................................................................ 70

2.6 辅助操作符 .................................................................................................................. 72

2.6.1 delay ........................................................................................................................... 72

2.6.2 do ............................................................................................................................... 74

2.6.3 materialize和dematerialize .......................................................................................... 78

2.6.4 subscribeOn和observeOn ............................................................................................ 80

2.6.5 timeInterval和timeStamp ............................................................................................ 82

2.6.6 timeout ........................................................................................................................ 84

2.6.7 using ........................................................................................................................... 87

2.7 条件操作 ...................................................................................................................... 90

2.7.1 all ............................................................................................................................... 90

2.7.2 amb............................................................................................................................ 92

2.7.3 contains ....................................................................................................................... 93

2.7.4 isEmpty ....................................................................................................................... 94

2.7.5 defaultIfEmpty ............................................................................................................. 95

2.7.6 sequenceEqual ............................................................................................................. 97

2.7.7 skipUntil和skipWhile ................................................................................................. 98

2.7.8 takeUntil和takeWhile ............................................................................................... 100

2.8 聚合操作符 ................................................................................................................ 102

2.8.1 concat ....................................................................................................................... 102

2.8.2 count ......................................................................................................................... 104

2.8.3 reduce ....................................................................................................................... 105

2.8.4 collect ....................................................................................................................... 106

2.9 与Connectable Observable相关的操作符 ............................................................... 107

2.9.1 publish和connect ...................................................................................................... 108

2.9.2 refCount .................................................................................................................... 110

2.9.3 replay ........................................................................................................................ 111

2.10 自定义操作符 .......................................................................................................... 114

2.10.1 lift ........................................................................................................................... 115

2.10.2 compose .................................................................................................................. 117

第3章 使用Scheduler进行线程调度 ................................................................................. 119

3.1 什么是Scheduler ....................................................................................................... 119

3.2 Scheduler的类型 ....................................................................................................... 121

3.2.1 computation ............................................................................................................... 121

3.2.2 newThread ................................................................................................................. 122

3.2.3 io .............................................................................................................................. 122

3.2.4 immediate .................................................................................................................. 123

3.2.5 trampoline ................................................................................................................. 123

3.2.6 from .......................................................................................................................... 123

3.3 总结 ............................................................................................................................ 125

第4章 RxJava的实现原理 ................................................................................................... 126

4.1 数据的发送和接收 .................................................................................................... 126

4.1.1 创建Observable的过程 ............................................................................................. 127

4.1.2 订阅的过程 ............................................................................................................... 128

4.2 操作符的实现 ............................................................................................................ 130

4.2.1 lift的工作原理 .......................................................................................................... 130

4.2.2 map的工作原理 ........................................................................................................ 132

4.2.3 flatMap的工作原理 ................................................................................................... 135

4.2.4 merge的工作原理 ..................................................................................................... 136

4.2.5 concat的工作原理 ..................................................................................................... 139

4.3 Scheduler的工作原理 ............................................................................................... 144

4.3.1 Scheduler源码 .......................................................................................................... 144

4.3.2 subscribeOn的工作原理 ............................................................................................ 152

4.3.3 observeOn的工作原理 .............................................................................................. 156

第5章 RxJava的应用实例 ................................................................................................... 161

5.1 计算π的值 ................................................................................................................ 161

5.2 图片的三级缓存 ........................................................................................................ 165

5.2.1 内存缓存 .................................................................................................................. 167

5.2.2 外存缓存 .................................................................................................................. 169

5.2.3 网络缓存 .................................................................................................................. 172

5.2.4 缓存管理 .................................................................................................................. 173

5.2.5 封装.......................................................................................................................... 176

5.2.6 运行测试 .................................................................................................................. 178

5.3 结合Retrofit和OkHttp访问网络 ............................................................................ 181

5.3.1 卡片类的定义 ........................................................................................................... 181

5.3.2 配置OkHttp .............................................................................................................. 183

5.3.3 配置Retrofit.............................................................................................................. 186

5.4 使用RxLifecycle避免内存泄漏 ............................................................................... 189

5.4.1 修改demo工程 .................................................................................................... 189

5.4.2 绑定其他生命周期 ................................................................................................ 191

5.5 使用RxBinding绑定各种View事件....................................................................... 193

5.5.1 绑定点击事件 ...................................................................................................... 194

5.5.2 绑定TextWatcher .................................................................................................. 196

5.5.3 绑定OnPageChangeListener ................................................................................... 197

第6章 RxJava 2的改进 ....................................................................................................... 200

6.1 Observable和Flowable ............................................................................................. 200

6.2 null的使用 ................................................................................................................. 203

6.3 Single和Completable ................................................................................................ 205

6.4 Maybe ......................................................................................................................... 207

6.5 Subscriber ................................................................................................................... 208

6.5.1 DefaultSubscriber .................................................................................................. 209

6.5.2 ResourceSubscriber ................................................................................................ 210

6.5.3 DisposableSubscriber ............................................................................................. 211

6.6 Action和Function ..................................................................................................... 212

6.7 错误处理 .................................................................................................................... 214

6.8 Scheduler .................................................................................................................... 216


猜您喜欢

读书导航