RxJava学习(九)

来源:互联网 发布:学英语从零开始软件 编辑:程序博客网 时间:2024/06/16 09:46

Scheduler调度器使用及示例

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

下表展示RxJava中常见的调度器种类:
这里写图片描述

除了之前我们介绍过的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);
0 0
原创粉丝点击