RxJava2.x之辅助操作符

do系列

  • doOnEach : Observable每发射一项数据就会调用它一次。如果传入的是Observable参数,那么它的所有方法也会调用。就好像它订阅了原始的Observable一样。
  • doOnNext  :  在下游onNext之前注册一个动作,然后回调动作里面的方法
  • doOnComplete 在下游OnComplete之前注册一个动作,然后回调动作里面的方法
  • doOnError  : 在下游OnError之前注册一个动作,然后回调动作里面的方法
  • doOnTerminate  :  在下游OnComplete之前注册一个动作,然后回调动作里面的方法
  • doAfterTerminate  :  在下游OnComplete之后注册一个动作,然后回调动作里面的方法
  • doAfterNext  : 在下游onNext之后注册一个动作,然后回调动作里面的方法
  • doFinally  :  几乎与doAfterTerminate一样,但是doFinally会在下游取消订阅时注册一个动作,然后回调动作里面的方法,而doAfterTerminate在下游取消订阅时不会注册动作。
  • doOnLifecycle : 为的生命周期事件调用适当的onXXX方法(在所有观察者之间共享)顺序(订阅、取消、请求)。实际上doOnDispose ,doOnSubscribe 内部就是调用此方法。
  • doOnDispose : 在下游取消订阅时注册一个动作,然后回调动作里面的方法
  • doOnSubscribe : 在下游OnSubscribe之前注册一个动作,然后回调动作里面的方法

delay

延迟一段指定的时间再发射Observable的数据。很好理解,不做代码示例,放个示意图。

materialize/dematerialize

materialize将数据项和事件通知都当做数据项发射;dematerialize刚好相反,将数据项当作事件发射出去。用得很少,了解不深

timeInterval

将发射数据的Observable转换为发射那些数据发射时间间隔的Observable。

subscribeOn/observeOn

rxjava里的调度器。分别为订阅调度器,观察调度器;作用于订阅者与观察者。

    @NonNull
    static final Scheduler SINGLE;   线程单例,所有的任务都在这一个线程中执行

    @NonNull
    static final Scheduler COMPUTATION; 常用于一些cpu密集的操作

    @NonNull
    static final Scheduler IO; 常用于IO密集型的操作,如读写文件,查询数据库,访问网络等

    @NonNull
    static final Scheduler TRAMPOLINE; 几乎没怎么用过,不太了解

    @NonNull
    static final Scheduler NEW_THREAD; 在每执行一个任务时都创建一个新的线程,与io相同,但是效率要更低
 
    AndroidSchedulers.mainThread() : android下特有,在ui线程执行,观察调度通常使用此方式来调度

timeout

如果Observable过了一个指定的时长仍没有发射数据,它就会发一个错误通知。看下简单例子。

Observable.just("111")
                .delay(5000, TimeUnit.MILLISECONDS)
                .timeout(2000, TimeUnit.MILLISECONDS)
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d("timeout", "onSubscribe: ");
                    }
                    @Override
                    public void onNext(String s) {
                        Log.d("timeout", "onNext: ");
                    }
                    @Override
                    public void onError(Throwable e) {
                        Log.d("timeout", "onError: ");
                    }
                    @Override
                    public void onComplete() {
                        Log.d("timeout", "onComplete: ");
                    }
                });

延迟5秒再发射数据,timeout时长为2秒。输出结果:

04-26 16:58:18.543 ******** D/timeout: onSubscribe:
04-26 16:58:20.553 ******** D/timeout: onError:

to系列 

将Observable转换为另一个对象或数据结构。

  • Future<T>    toFuture     转换成 Future
  • Single<List<T>>    toList   转换成list
  • Single<Map<K, T>>    toMap (Function  f)  转换成 map
  •  Single<Map<K, Collection<T>>>   toMultimap  (Function  f) 转换成map
  • Single<List<T>>    toSortedList     转换成一定顺序排列的list
发布了46 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/FooTyzZ/article/details/89554216