RxJava2已经出来好久了,参加一些Android技术会议也经常能听到RxJava的名字。听很多人说RxJava的学习曲线很陡峭,我找了一些文章看看感觉也还好,可能是作者写的太好了,这其中自然少不了 扔物线 和 大头鬼。看了很多介绍后,我简要的做了一个总结,并用RxJava2对一些网络请求基于Volley的旧代码进行了改造,主要解决了“回调地狱”的问题。下面先简述我对RxJava的理解。
要用几个关键词来形容Rxjava的话,我觉得是:
- “异步”
- “观察者模式”
- “链式调用”
- “解耦”
异步是因为RxJava可以方便用操作符进行线程切换,这也是很多人使用RxJava的主要原因。
观察者模式是RxJava的基石,也是Rx响应式编程思想的基石。
链式调用是RxJava的展现形式,美观简洁清晰,一眼扫过链式调用的各操作符就能理解代码的功能。
解耦是使用RxJava的结果,之前各种嵌套调用,或者没必要拼到一起的逻辑,得以完全分开,而通过RxJava的事件流来重新组织在一起。
上述两张图展示了RxJava的基本模型,被观察者Observable调用来onNext/onCompleted/onError来将相应事件发送给观察者Observer,而Observer会依次处理Observable发来的多个事件。
在此基础上,RxJava定义了众多的操作符,常用的操作符主要可分为这五类:
- 创建 just from timer
- 转换 map flatMap buffer
- 过滤 filter first take
- 组合 zip concat merge
- 线程 subscribeOn observeOn
- ReactiveX http://reactivex.io
- RxAndroid https://github.com/ReactiveX/RxAndroid
- RxBinding https://github.com/JakeWharton/RxBinding
- Retrofit http://square.github.io/retrofit/
- backpressure处理
- 不再支持传入null
- 允许函数throws Exception
- 重命名
- 嵌套回调
- 并行回调
- 循环调用
- 延时调用
- 防止连续点击
- 有助于解决callback hell
- 链式调用处理异步任务
- 统一的编程范式
- 可以扩展自己的操作符
RxJava使用场景小结(大头鬼Bruce)
RxJava使用介绍(一叶飘舟)
RxJava之错误处理(行云间)
RxJava1.X升级到RxJava2.X笔记(续写经典)
RxJava 2.0 全新来袭(拉丁吴)