RxJava知识学习系列(一)

RxJava概念

RxJava是一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序库。
RxJava的异步实现,是通过一种扩展的观察者模式来实现的。这也是基于“响应式编程”的概念。在RxJava的观察者模式中,如果没有观察者,被观察者不会发出事件的。

RxJava相对于AsyncTask 和Handler,优势在于随着程序逻辑变得愈加复杂,依旧可以保持简洁。

RxJava名词解释

map(), flatMap(), distinct(), filter(), take() – 这些就是操作符。它们可以修改被传出的数据 - 一个接着一个按照流水线式操作数据。

subscribeOn() – 告诉 Observable 当 subscribe() 方法被调用后它应该在哪个线程被启动。接着每个操作符都会在那个线程工作直到我们改变线程。

observeOn() – 改变下一个操作符的工作线程。每个在这个方法之后的操作符都会在它指定的新的线程里工作,直到我们通过别的 observeOn() 改变线程。

常用操作符

map()转换操作符将已有的对象一对一转换成别的对象,从而获取需要的数据。即分流。

flatMap()操作符可以将已有的对象一对多转化成别的对象。

distinct()这个操作符用来处理重复项,并且它不会让任何已经通过的相同字符串再次通过。每个都是 DISTINCT (独特的)。

filter()操作符就是个简单的对/错判断表达式。

take()操作符 TAKES (取出)指定数量的信息。

flatMap() 与 map()联系
相同点:它也是把传入的参数转化之后返回另一个对象。
不同点:flatMap() 中返回的是个 Observable 对象,并且这个 Observable 对象并不是被直接发送到了 Subscriber 的回调方法中。

flatMap() 的原理是这样的

  1. 使用传入的事件对象创建一个 Observable 对象;
  2. 并不发送这个 Observable, 而是将它激活,于是它开始发送事件;
  3. 每一个创建出来的 Observable 发送的事件,都被汇入同一个 Observable ,而这个 Observable 负责将这些事件统一交给 Subscriber 的回调方法。这三个步骤,把事件拆成了两级,通过一组新创建的 Observable 将初始的对象『铺平』之后通过统一路径分发了下去。而这个『铺平』就是 flatMap() 所谓的 flat。

拓展:由于可以在嵌套的 Observable 中添加异步代码, flatMap() 也常用于嵌套的异步操作,例如嵌套的网络请求Retrofit + RxJava结合的网络请求框架。对比以往的在callback中实现嵌套请求,flatMap() 的链式潜逃使逻辑更清晰。

Retrofit + RxJava网络请求框架

Retrofit + RxJava模式下,Retrofit 把请求封装进 Observable ,在请求结束后调用 onNext() 或在请求失败后调用 onError()。
传统的Retrofit模式下,Retrofit 提供了 Callback 形式的 API回调请求返回的数据。

Retrofit + RxJava优势:
场景:网络请求返回的数据并不应该直接显示,而是需要先与数据库中的数据进行比对和修正后(耗时操作)再显示。

传统的办法是在请求接口回调后再进行数据库对比,这里若没在自线程中进行易造成ANR,若new Thread()方式在子线程中进行会对代码的可读性有影响。

而Retrofit + RxJava模式下,直接在链式代码中进行数据库操作,然后切换主线程来显示最终数据。逻辑简洁清晰。

以上是对RxJava的初步学习,未完待续~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值