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);