三默网为您带来有关“Rxjava2(二)”的文章内容,供您阅读参考。

Rxjava2(二)

2023-01-21 19:48:12

RxJava的线程控制


在子线程(上游)中做耗时的操作, 然后回到主线程(下游)中来操作UI


要达到这个目的, 我们需要先改变上游发送事件的线程, 让它去子线程中发送事件, 然后再改变下游的线程, 让它去主线程接收事件. 通过RxJava内置的线程调度器可以很轻松的做到这一点


代码实现:

observable.subscribeOn(Schedulers.newThread())      // observable开设新子线程                                        
            .observeOn(AndroidSchedulers.mainThread()) // observer线程开设在主线程中                                         
            .subscribe(consumer/observer); // 连接 

线程切换
可以切换下游(observer )的线程,但是不能切换上游(observable)的线程
即下游可以切换在不同线程中接收

observable.subscribeOn(Schedulers.newThread()) // 上游observable在子线程
                .subscribeOn(Schedulers.io()) // 上游在io线程(但其实不执行)
                .observeOn(AndroidSchedulers.mainThread())// 下游在主线程
                .doOnNext(new Consumer<Integer>() {       // 执行next事件
                    @Override
                    public void accept(Integer integer) throws Exception {
                        Log.d(TAG, "After observeOn(mainThread), current thread is: " + Thread.currentThread().getName());
                    }
                })
                .observeOn(Schedulers.io()) // 下游在io线程
                .doOnNext(new Consumer<Integer>() { // 执行next事件
                    @Override
                    public void accept(Integer integer) throws Exception {
                        Log.d(TAG, "After observeOn(io), current thread is : " + Thread.currentThread().getName());
                    }
                })
                .subscribe(consumer); //连接


常见线程选择项:

  • Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作
  • Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作
  • Schedulers.newThread() 代表一个常规的新线程
  • AndroidSchedulers.mainThread() 代表Android的主线程

实现约束请求的逻辑顺序请看下一篇博客:
Rxjava2(三):http://blog.csdn.net/weixin_37577039/article/details/78622443

异步请求实例见另一篇博客:http://blog.csdn.net/weixin_37577039/article/details/78556296

该文章转载自:http://www.jianshu.com/p/464fa025229e