美文网首页
RxJava2学习笔记2

RxJava2学习笔记2

作者: A_si | 来源:发表于2017-07-08 11:10 被阅读283次

我们通常再retrofit里结合rxjava使用。请求的时候要显示一个loading动画,请求结束或者刷新或者加载更多结束,要取消这个动画,但是我们的回掉是三个方法,如果再每个方法都写,很麻烦,有没有更好的方法呢?学习2个do方法。

doOnSubscribe
subscribe时调用,默认执行在 subscribe() 发生的线程。一般用于执行一些初始化操作,可以控制线程。

测试决定doOnSubscribe的线程

                .observeOn(Schedulers.io())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(@NonNull Disposable disposable) throws Exception {
                        System.out.println("doOnSubscribe=" + Thread.currentThread().getName());
                    }
                })
                .observeOn(Schedulers.single())

// doOnSubscribe=main
说明与observeOn无关。

再来

                .subscribeOn(Schedulers.io())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(@NonNull Disposable disposable) throws Exception {
                        System.out.println("doOnSubscribe=" + Thread.currentThread().getName());
                    }
                })
               .subscribeOn(Schedulers.single())

//doOnSubscribe=RxSingleScheduler-1

结论:如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn() 所指定的线程。

这个方法在Android种的应用:可以放show一个loading。那么为什么不在onSubscribe和onStart里呢,因为onSubscribe和onStart发生在Observable.create所在线程,并且onStart一开始就调用。

doFinally
结束时调用,默认执行在 subscribe() 发生的线程。一般用于执行一些结束操作,可以控制线程。

在请求结束onComplete或者onError之后。会走doFinally,他的线程是在上面最近的observeOn的线程决定的。

                .doFinally(new Action() {
                    @Override
                    public void run() throws Exception {
                        System.out.println("doFinally1" + Thread.currentThread().getName());

                    }
                })
                .observeOn(Schedulers.single())

// doFinally1main 默认在subscribe线程。

         .observeOn(Schedulers.io())
                .doFinally(new Action() {
                    @Override
                    public void run() throws Exception {
                        System.out.println("doFinally1" + Thread.currentThread().getName());

                    }
                })
                .observeOn(Schedulers.single())

//doFinally1RxCachedThreadScheduler-1 由上方最近的observeOn线程决定。

这个方法在Android种的应用:可以放取消loading。那么为什么不在onComplete和onError里呢,因为onComplete和onError发生在是互斥的,也就是如果走了onComplete就不会调用onError,2个方法都要写。

相关文章

  • RxJava2笔记(五、订阅流程梳理以及线程切换次数有效性)

    在前面的几篇文章RxJava2笔记(一、事件订阅流程)RxJava2笔记(二、事件取消流程)RxJava2笔记(三...

  • Android Develop——RxJava2(二) RxJa

    在RxJava2(一)教程中,已经跟着大神们学习了RxJava2的基本使用,现在我们来学习一下RxJava2很强大...

  • RxJava2 学习笔记

    函数响应式编程 函数响应式编程的思维是将问题抽象为数据加工,一切问题都是数据源发出数据的问题,所以用函数响应式编程...

  • RxJava2学习笔记

    intro "森林里的一棵树倒下来,如果周围没有人听见,那么就等于说树的倒下是寂静无声的." 随着产品功能的增加,...

  • rxjava2 学习笔记

    特点 链式调用 线程切换 操作符 创建操作符 转换操作符 过滤操作符 组合操作符 错误处理操作符 辅助性操作符 条...

  • RxJava2学习笔记

    本文参考RxJava2 只看这一篇文章就够了,强烈推荐大家去看一下。 RxJava的组成 被观察者-------O...

  • RxJava2学习笔记

    我们为什么选择RxJava Infinite Streams 无限流 Asynchronous execution...

  • RxJava2学习笔记2

    我们通常再retrofit里结合rxjava使用。请求的时候要显示一个loading动画,请求结束或者刷新或者加载...

  • RxJava2笔记(三、订阅线程切换)

    在前面两篇文章RxJava2笔记(一、事件订阅流程)和RxJava2笔记(二、事件取消流程)中,我们分别了解了事件...

  • Rxjava2 操作符原理(2)

    Rxjava2 基本用法(1) Rxjava2 操作符原理(2) Rxjava2 线程切换(3) Rxjava2 ...

网友评论

      本文标题:RxJava2学习笔记2

      本文链接:https://www.haomeiwen.com/subject/dnxrhxtx.html