RxJava学习(九)

Scheduler调度器使用及示例

之前提到过subscribeOn和observeOn这两个方法,我在讲一下这两个方法是干啥用的。
subscribeOn
指定被观察者,也就是事件源在哪个线程执行
observeOn
指定观察者运行在哪个线程
通常境况下我们会是事件源运行在其他线程,而观察者运行在主线程,也就是UI线程。

下表展示RxJava中常见的调度器种类:
RxJava学习(九)_第1张图片

除了之前我们介绍过的subscribeOn/observeOn会用到Scheduler。在RxJava中还有Worker会用到它。

传统的线程

new Thread(new Runnable() {
    @Override
    public void run() {
        // TODO 
    }
}).start();

在RxJava中我们这样写

  Schedulers.newThread().createWorker().schedule(new Action0() {
            @Override
            public void call() {// name:RxNewThreadScheduler-1
                System.out.println("=====name: "+Thread.currentThread().getName());
            }
        });

这样的好处是我们可以直接使用RxJava的线程调度逻辑。并且在合适的时机终止线程

  Scheduler.Worker worker = Schedulers.newThread().createWorker();
        worker.schedule(new Action0() {
            @Override
            public void call() {// name:RxNewThreadScheduler-1
                System.out.println("=====name: "+Thread.currentThread().getName());
            }
        });
        worker.unsubscribe();

除此之外,还有个好处是更容易的实现延迟执行和周期执行:

 //延迟
        Schedulers.computation().createWorker().schedule(new Action0() {
            @Override
            public void call() {

            }
        },3000, TimeUnit.SECONDS);
        //周期
        Schedulers.computation().createWorker().schedulePeriodically(new Action0() {
            @Override
            public void call() {

            }
        },0,1000,TimeUnit.SECONDS);

你可能感兴趣的:(RxJava学习(九))