参考:
https://www.jianshu.com/p/45309538ad94
https://www.heqiangfly.com/2017/10/18/open-source-rxjava-single-completable-maybe/
类型 | 描述 |
---|---|
Observable<T> | 能够发射0或n个数据,并以成功或错误事件终止。 |
Flowable<T> | 能够发射0或n个数据,并以成功或错误事件终止。 <br/>支持Backpressure,可以控制数据源发射的速度。 |
Single<T> | 只发射单个数据或错误事件。 |
Completable | 它从来不发射数据,只处理 onComplete 和 onError 事件。<br />可以看成是Rx的Runnable。 |
Maybe<T> | 能够发射0或者1个数据,要么成功,要么失败。有点类似于Optional |
我们常用的是Observable和Flowable,最常用的是Observable,今天我就看一下Single、Completable以及Maybe的用法。
Single
Single的SingleObserver中只有onSuccess、onError,并没有onComplete。这是 Single 跟其他四种被观察者最大的区别。其他的它的使用和Observable差不多
Single.create(new SingleOnSubscribe<String>() { public void subscribe( SingleEmitter<String> e) throws Exception { e.onSuccess("test"); } }).subscribe(new Consumer<String>() { public void accept( String s) throws Exception { System.out.println(s); } }, new Consumer<Throwable>() { public void accept( Throwable throwable) throws Exception { throwable.printStackTrace(); } });
Completable
Completable在创建后,不会发射任何数据。Completable 只有 onComplete 和 onError 事件,同时 Completable 并没有map、flatMap等操作符,它的操作符比起 Observable/Flowable 要少得多。
Completable.create(new CompletableOnSubscribe() { public void subscribe( CompletableEmitter e) throws Exception { e.onComplete(); //e.onError(new Throwable("Error")); } }).subscribeOn(AndroidSchedulers.mainThread()) .observeOn(Schedulers.io()) .subscribe(new CompletableObserver() { public void onSubscribe( Disposable d) { } public void onComplete() { Log.e("Test", "onComplete"); } public void onError( Throwable e) { Log.e("Test", "onError"+e.toString()); } });
Maybe
Maybe 是 RxJava2.x 之后才有的新类型,可以看成是Single和Completable的结合。
Maybe创建之后,MaybeEmitter 和 SingleEmitter 一样并没有onNext()方法,同样需要通过onSuccess()方法来发射数据。
Maybe.create(new MaybeOnSubscribe<String>(){ public void subscribe( MaybeEmitter<String> e) throws Exception { e.onSuccess("onSuccess"); //e.onError(new Throwable("Error")); //e.onComplete(); } }).subscribeOn(AndroidSchedulers.mainThread()) .observeOn(Schedulers.io()) .subscribe(new MaybeObserver<String>() { public void onSubscribe( Disposable d) { } public void onSuccess( String s) { Log.e("Test","onSuccess"); } public void onError( Throwable e) { Log.e("Test","onError"); } public void onComplete() { Log.e("Test","onComplete"); } });
扫描二维码关注公众号,回复:
1647918 查看本文章