RxJava 3.x

 RxJava函数式编程是一种编程范式。响应式编程是一种面向数据流和变化传播的编程范式,数据更新是相关联的。函数响应式编程可以极大地简化项目,特别是处理嵌套回调的异步事件,复杂的列表过滤和变换或者时间相关问题。

Rx是函数库,让开发者可以利用可观察序列和LINQ风格查询操作符来编译异步和基于事件的程序。

RxJava与观察者模式

        RxJava的异步操作是通过扩展的观察者模式来实现的,RxJava有4个角色Observable、Observer、Subscriber、Suject。

RxJava基本实现在使用RxJava前请先在Android Studio 中配置gradle:

1.创建Observer(观察者)它决定事件触发的时候将有怎样的行为,代码如下所示:

其中onCompleted、onError和onNext是必须要实现的方法,其含义如下。

•onCompleted:事件队列完结。RxJava不仅把每个事件单独处理,其还会把它们看作一个队列。当不会再有新的 onNext发出时,需要触发 onCompleted()方法作为完成标志。

•onError:事件队列异常。在事件处理过程中出现异常时,onError()会被触发,同时队列自动终止,不允许再有事件发出。

•onNext:普通的事件。将要处理的事件添加到事件队列中。

•onStart:它会在事件还未发送之前被调用,可以用于做一些准备工作。例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。

当然,如果要实现简单的功能,也可以用到Observer来创建观察者。Observer是一个接口,而上面用到的 Subscriber 是在Observer 的基础上进行了扩展。在后文的 Subscribe 订阅过程中Observer也会先被转换为Subscriber来使用。用Observer创建观察者,如下所示:

创建 Observable(被观察者)

它决定什么时候触发事件以及触发怎样的事件。RxJava 使用create 方法来创建一个Observable,并为它定义事件触发规则,如下所示:

通过调用Subscriber的方法,不断地将事件添加到任务队列中。也可用just方法来实现:Observable observable=Observable.just("杨影枫","月眉儿");上述代码会依次调用onNext("杨影枫")、onNext("月眉儿")、onCompleted()。还可以用from方法来实现,如下所示:

RxJava的Subject

          Subject 既可以是一个 Observer 也可以是一个Observerable,它是连接 Observer 和Observerable的桥梁。因此,Subject可以被理解为Subject=Observable+Observer。RxJava提供了以下4种Subject。

        1.PublishSubjectPublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者。需要注意的是,PublishSubject可能会一创建完成就立刻开始发射数据,因此这里会有一个风险:在Subject被创建后到有观察者订阅它之前这个时间段内,一个或多个数据可能会丢失。如果要确保来自原始Observable的所有数据都被分发,则可以当所有观察者都已经订阅时才开始发射数据,或者改用ReplaySubject。

        2.BehaviorSubject当Observer订阅BehaviorSubject时,它开始发射原始Observable最近发射的数据。如果此时还没有收到任何数据,它会发射一个默认值,然后继续发射其他任何来自原始Observable的数据。如果原始的Observable因为发生了一个错误而终止,BehaviorSubject将不会发射任何数据,但是会向Observer传递一个异常通知。

        3.ReplaySubject不管Observer何时订阅ReplaySubject,ReplaySubject均会发射所有来自原始Observable的数据给Observer。有不同类型的ReplaySubject,它们用于限定Replay的范围,例如设定Buffer的具体大小,或者设定具体的时间范围。如果使用ReplaySubject作为Observer,注意不要在多个线程中调用onNext、onComplete和onError方法。这可能会导致顺序错乱,并且违反了Observer规则。

        4.AsyncSubject当Observable完成时,AsyncSubject只会发射来自原始Observable的最后一个数据。如果原始的 Observable 因为发生了错误而终止,AsyncSubject 将不会发射任何数据,但是会向Observer传递一个异常通知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟、。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值