CMFSRxJava2.0接口

特点

数据源基本类型 数据源特点
Observable 与RxJava1中的Observable类似,但不支持Backpressure
Flowable 与RxJava1中的Observable类似,支持Backpressure
Single 只发射一条数据
Completable 不发射数据,仅发射onComplete()onError事件
Maybe 最多发射一条数据。

相关接口

数据源基本类型 数据源接口 观察者接口 发射器接口 订阅管理接口
Observable ObservableSource Observer ObservableEmitter Disposable
Flowable Publisher Subscriber FlowableEmitter Subscription
Single SingleSource SingleObserver SingleEmitter Disposable
Completable CompletableSource CompletableObserver CompletableEmitter Disposable
Maybe MaybeSource MaybeSource MaybeEmitter Disposable

接口说明

数据源接口

定义观察数据的行为及接受观察者的类型。

主要有五种数据源接口:ObservableSourcePublisherSingleSourceCompletableSourceMaybeSource。每一种数据源接口接受的观察者接口类型不同,且观察者接口之间不存在继承关系。

ObservableSource

public interface ObservableSource<T> {
  void subscribe(Observer<? super T> observer);
}

Publisher

public interface Publisher<T> {
  void subscribe(Subscriber<? super T> s);
}

SingleSource

public interface SingleSource<T> {
  void subscribe(SingleObserver<? super T> observer);
}

CompletableSource

只跟事件类型相关,与数据类型无关。

public interface CompletableSource {
  void subscribe(CompletableObserver cs);
}

MaybeSource

public interface MaybeSource<T> {
  void subscribe(MaybeObserver<? super T> observer);
}

观察者接口

定义观察者可接受的事件类型

一般存在以下四种事件。

  • onSubscribe():在观察者开始观察数据源时调用。一定会调用。
  • onNext():数据源发射数据,观察者接收到数据时调用。可能会调用,且不会存在于onError()onComplete()事件后。
  • onError():数据源发生异常时调用。可能会调用,调用后终止观察,后续不再接收任何事件。不能与onComplete()同时存在。
  • onComplete():数据源发射所有数据后调用。可能会调用,调用后结束观察,后续不再接收任何事件。不能与onError()同时存在。

Observer

public interface Observer<T> {
  void onSubscribe(@NonNull Disposable d);
  void onNext(@NonNull T t);
  void onError(@NonNull Throwable e);
  void onComplete();
}

Subscriber

public interface Subscriber<T> {
  void onSubscribe(@NonNull Subscription s);
  void onNext(@NonNull T t);
  void onError(@NonNull Throwable e);
  void onComplete();
}

SingleObserver

仅发送一个元素。

  • 观察到数据源发射成功时,会调用onSuccess()
  • 观察到数据源发射失败时,会调用onError()
public interface SingleObserver {
  void onSubscribe(Disposable d);
  void onSuccess(@NonNull T t);
  void onError(@NonNull Throwable e);
}

CompletableObserver

不关注发送元素的个数,只关注是否正常结束或异常结束,故不含onNext

public interface CompletableObserver {
  void onSubscribe(@NonNull Disposable d);
  void onComplete();
  void onError(@NonNull Throwable e);
}

MaybeObserver

最多只接收一个元素。

SingleObserver类似,如果接收到一个元素,那么会调用onSuccess,与onNext不同,onSuccess后面不需要onComplete事件。所以onComplete被用来区分数据源没有元素发送的场景。

public interface MaybeObserver {
    void onSubscribe(@NonNull Disposable d);
    void onSuccess(@NonNull T t);
    void onError(@NonNull Throwable e);
    void onComplete();
}

数据发射器接口

定义发射的数据类型及数据发射的方式

用在各种类似发生器的源运算符(如creategenerate)以推送方式发送信号的基本接口。

public interface Emitter<T> {
  void onNext(@NonNull T value);
  void onError(@NonNull Throwable error);
  void onComplete();
}

目前主要有ObservableEmitterFlowableEmitterSingleEmitterCompletableEmitterMaybeEmitter五种数据发射器接口。
这些接口基本含有以下方法:

  • void onNext(@NonNull T t); // onSuccess()
  • void onError(@NonNull Throwable t);
  • void onComplete();
  • void setDisposable(@Nullable Disposable d);
  • void setCancellable(@Nullable Cancellable c);
  • boolean isDisposed();
  • boolean tryOnError(@NonNull Throwable t);

ObservableEmitterFlowableEmitter则包含一个serialize

  • @NonNull ObservableEmitter<T> serialize();
  • @NonNull FlowableEmitter<T> serialize();

ObservableEmitter

implements Emitter

可发射多条数据,但不支持Backpressure

FlowableEmitter

implements Emitter

可发射多条数据,支持Backpressure

SingleEmitter

仅发射一个数据。

CompletableEmitter

不发射任何数据。

MaybeEmitter

最多发射一个数据。

订阅管理接口

管理数据源的生命周期

Disposable

订阅后数据源立即发射数据。观察者并不能影响数据发射的数量和频率。

数据源在订阅后主动发射数据

public interface Disposable {
  void dispose();
  boolean isDispose();
}

Subscription

订阅后并不发射数据。需要观察者调用request()方法来拉取数据。观察者可根据自己的需要决定拉取数据的数量和频率。

数据源在订阅后并不发射数据,由观察者自行拉取数据。

public interface Subscription {
  void request(long n);
  void cancel();
}