
特点
| 数据源基本类型 | 数据源特点 |
|---|---|
| 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 |
接口说明
数据源接口
定义观察数据的行为及接受观察者的类型。
主要有五种数据源接口:ObservableSource、Publisher、SingleSource、CompletableSource、MaybeSource。每一种数据源接口接受的观察者接口类型不同,且观察者接口之间不存在继承关系。
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();
}
数据发射器接口
定义发射的数据类型及数据发射的方式
用在各种类似发生器的源运算符(如create、generate)以推送方式发送信号的基本接口。
public interface Emitter<T> {
void onNext(@NonNull T value);
void onError(@NonNull Throwable error);
void onComplete();
}
目前主要有ObservableEmitter、FlowableEmitter、SingleEmitter、CompletableEmitter和MaybeEmitter五种数据发射器接口。
这些接口基本含有以下方法:
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);
而ObservableEmitter和FlowableEmitter则包含一个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();
}




近期评论