RxJava在Kotlin语言中的使用(一)RxJava初步了解

注:本博客仅为作者个人学习记录,不作为任何教程,仅供参考

RxJava是一个 基于事件流、实现异步操作的库,由于其实现基于事件流的链式调用,逻辑清晰,使用简单,在Android开发中广为使用,可以替代 Android中的5种异步操作实现方式,如Handler,AsnycTask等。

RxJava将事件发送,传递,处理各分为3个角色,也就是设计模式中的观察者模式,它们分别是 被观察者(Observable)、订阅(Subcrible)、观察者(Observer)。

它们分别又是什么?需要干什么呢?

Observable被观察者,在这个角色中将一些初始的数据(也叫事件进行发送),
Observer观察者,将被观察者发送过来的事件进行逻辑处理,
Subcrible 订阅,将被观察者和观察者之间建立联系,只有建立联系,观察者才能接收到被观察者发送过来的事件。

你可以这么理解,Observable被观察者相当于 你女朋友,Observer观察者相当于你,你的女朋友事贼多,每次都会把要做的事情告诉你,让你去详细做完这些事,而前提是你们是男女朋友的关系,所以需要Subcrible订阅后,建立关系。

完整过程的创建

1. Observable被观察者建立

在这里插入图片描述
创建被观察者对象,Observable.create(匿名对象继承ObservableSubcrible类),重写 subcribe()方法, 方法体内,发送了三个事件,事件的数据类型为String,然后调用onComplete()完成方法。

这样一个基本的被观察者就创建好了

可每次都需要这么写也太麻烦了,所以我们还可以这样创建:
在这里插入图片描述
二者效果一样,参数以及方法被封装的非常好

2.观察者Observer的创建、以及订阅建立关系
在这里插入图片描述
观察者创建是实现 Oberserver接口,同时重写4个方法,分别是:
onSubcrible():只有观察者和被观察者建立订阅关系时,才会被调用。
onNext():接收到被观察者发送的数据,对数据进行逻辑处理。
onError:被观察者发送了错误事件时调用。
onComplete():当观察者已经处理完了全部事件后调用,也有说法是当被观察者发送Complete事件,观察者接收到后,调用此方法。
注意:onError()和onComplete()互斥,只会调用其中一个。

然后将两者订阅,建立关系。有意思的是 理论上应该是观察者订阅被观察者,人订阅了书籍,但事实上逻辑是反过来的,被观察者订阅观察者,为什么嘞?这个就得问作者了,俺也不知道。

链式调用

为了简化推荐如下方式:
在这里插入图片描述
Consumer消费者
consumer是继承于Observable, 它的实例化只需要重写accept方法, accept可以接收值,也可以接收异常, 所以日常开发中,如果没有太大必要,一般使用consumer, 使用lambda表达式简化后,可见右侧。

Disposable.dispose()切断观察者与被观察者之间的联系

当某些时候,被观察者发送了很多事件,但我们并不需要把所有事件都处理,需要在接收到某个事件后,切断联系。那么就需要使用Disposable.dipose()切断观察者对于被观察者的监控,切断后,则观察者将无法监听事件,但被观察者依然可以继续发送事件。使用方法是在Observer对象中,声明Disposable对象,在onSubcribe方法中,用参数给Disposable 对象进行赋值,在OnNext方法中,对传进来的事件值进行逻辑判断,是否调用 dipose方法,一旦调用,则observer无法再监听事件了.
在这里插入图片描述
在接收到 “jack”后就切断了联系,所以观察者只处理了“jack”事件,后面的Lucy和paba都接收不到。

下一篇,我记录了RxJava 的创建操作符。本文如有任何错误,欢迎指出,非常感谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值