RxJava2.0的使用-1

来源:互联网 发布:淘宝卖家钢琴怎么发货 编辑:程序博客网 时间:2024/05/17 03:06

RxJava2.0的使用-1

注:以下仅适用于RxJava2.0

添加依赖

compile 'io.reactivex.rxjava2:rxjava:2.1.0'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

基本概念:

Observable:数据发射源,在观察者模式中称为“被观察者”;

Observer:数据接收源,在观察者模式中称为“观察者”,可接收Observable;

一、简单使用

创建一个Observable

创建一个Observer

Observable与Observer建立连接

查看日志

将上述代码连起来就是RxJava引以为傲的链式操作:

注意:

  1. 只有Observable与Observer建立连接之后, Observable才会开始发送事件。即调用subscribe() 方法之后才开始发送事件。
  2. Observable可以发送无限个onNext,Observer也可以接收无限个onNext。
  3. Observable可以不发送onComplete或onError。
  4. Observable发送了一个onComplete后,onComplete之后的事件将会继续发送;而Observer收到onComplete事件之后将不再继续接收事件。
  5. Observable发送了一个onError后,onError之后的事件将继续发送;而Observer收到onError事件之后将不再继续接收事件。
  6. onComplete和onError必须唯一且互斥。即不能发多个onComplete; 不能发多个onError,;不能先发一个onComplete, 然后再发一个onError; 反之亦然。发送多个onComplete是可以正常运行的, Observer收到第一个onComplete就不再接收了;但若是发送多个onError,收到第二个onError事件会导致程序会崩溃。这点需要自行在代码中进行控制。

二、Observer(数据接收源)的创建

创建一个数据接收源:

调用顺序:首先会调用onSubscribe方法,这里可以拿到Disposable的实例;然后根据Observable的发射顺序调用onNext()、onComplete()、onError()方法。

Observer:T代表Observer接收的数据类型,与onNext()方法的接收的数据类型一致。
Disposable:表示一次性资源,用来监测取消发射源与接收源的数据连接关系,参数d的实例可以随时调用dispose()方法取消连接。取消连接后,Observable会继续发送剩余的事件,而Observer不再接受事件。例如:Observable依次发送”1”,”2”,”3”,onComplete(),”4”;在Observer在接收到”2”后调用dispose()方法取消连接。



可以看出:刚开始Disposable的取消连接状态为false,即在连接状态;接收到”2”后调用dispose(),此时取消连接状态为true,即在未连接状态,此后Observer便不再接收事件。但Observable会继续发送”3”,onComplete(),”4”事件。

三、subscribe的重载方法

public final Disposable subscribe() {}public final Disposable subscribe(Consumer<? super T> onNext) {}public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {} public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}public final void subscribe(Observer<? super T> observer) {}

3.1 参数为Observer < T > 的subscribe方法

这种方法上文已经使用过,这种方法会监听onSubscribe()、onNext()、onComplete()、onError()事件。

3.2 不带参数的subscribe方法

这种方法可以理解为没有给数据发射源绑定数据接收源,即Observable调用onSubscribe()后开始发送事件,但是没有接收事件的对象。

3.3 带参数的subscribe方法

这种方法表示只有某些事件的回调,例如只有onNext()事件的回调。

由Log可以看出,当Observable调用了onComplete()方法后,Observer依旧会停止接收onComplete()之后的事件。由此可以看出,虽然这种带参数的subscribe方法只有某些方法的回调,但是接收事件的逻辑不会改变,只是缺少了没有回调事件的响应能力。

其他带参数的subscribe方法类似,此处就不一一说明了。

四、Observable的创建方式

4.1 create()方式

ObservableEmitter:安全发射器,不能为空。可以发送三种类型的事件,分别为:onNext(T value)、onComplete()和onError(Throwable error)。

4.2 new 方式

4.3 just()方式

这种方式将创建一个Observable并自动调用onNext( )发射数据,发射完所填数据后自动调用onComplete()方法。just方法支持填入的数据类型为T,不能为空,支持数据个数为1~10。

4.4 from系列()方式

这种方式是将一个序列转化为一个ObservableSource,发射这个序列里的每个item。

例子描述:Array

例子描述:List

4.5 defer( )方式

这种方式有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable,执行Call()方法。

4.6 interval( )方式

创建一个以指定延迟时间、按固定时间间隔发射序列的Observable。

public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit) {}
  1. initialDelay:延迟时间
  2. period:循环周期
  3. unit:时间间隔周期

例子描述:创建一个延迟为两个时间单位、周期为一个时间单位、时间单位是秒的Observable。

由Log可以看出Observable确实是以延迟2秒、时间间隔为1秒发射了一个起始值为0的自然数序列。需要注意的是Observer需要调用dispose()断开连接,否则Observer会一直接收数据。

4.7 rangeLong()方式

创建一个以指定起始值、指定个数的发射序列的Observable。

 public static Observable<Long> rangeLong(long start, long count) {}
  1. start:起始值
  2. count:个数。若为0,不发送;若为负数,抛异常。

例子描述:创建一个以起始值为2,个数为5的Observable。即发送2、3、4、5、6。

由Log可以看出Observable发射事件时没有时间间隔和延迟。

4.8 timer()方式

创建一个在指定时间单位后发射特殊值的Observable。

public static Observable<Long> timer(long delay, TimeUnit unit) {}

例子描述:创建一个以2个时间单位为延迟,时间单位为秒的Observable。

4.9 Observable的其他方法

4.9.1 设置循环次数

使用repeat()方法设置循环次数

4.9.2 设置延时

使用delay()设置延时

原创粉丝点击