注:本博客仅为作者个人学习记录,不作为任何教程,仅供参考
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 的创建操作符。本文如有任何错误,欢迎指出,非常感谢。