上一篇:RxJava 源码学习之组合操作符
如果你想给Observable操作符链添加多线程功能,你可以指定操作符(或者特定的Observable)在特定的调度器(Scheduler)上执行。
调度器种类
![](https://img.haomeiwen.com/i1976991/46e10e1f215674fe.png)
默认调度器(一些操作符对应的调度器)等一些其他知识,大家可以查看官网之调度器。
调度器使用
RxJava提供ObserveOn和SubscribeOn操作符,可以让Observable在一个特定的调度器上执行,ObserveOn指示一个Observable在一个特定的调度器上调用观察者的onNext, onError和onCompleted方法,SubscribeOn更进一步,它指示Observable将全部的处理过程(包括发射数据和通知)放在特定的调度器上执行。
看示例代码:
Observable
.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
System.out.println("create - 当前线程信息:"+Thread.currentThread().getName());
int i = 1+2+3+4+5+6+7+8+9;
subscriber.onNext(i);
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.computation()) // Observable.from 在 computation 调度器上执行
.observeOn(Schedulers.io()) // Subscriber 在 io 调度器上执行
.subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("next - 当前线程信息:"+Thread.currentThread().getName());
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
//################################
输出结果:
create - 当前线程信息:RxComputationScheduler-1
next - 当前线程信息:RxIoScheduler-2
Next: 45
Sequence complete.
Scheduler调度器的使用需要根据正确的情景环境选择正确的调度器种类。
结束语
Perfect!!! RxJava源码学习到这里就完成啦 :P !RxJava的更多详细知识和拓展,还需要我们不断的在开发使用过程中去发现和总结。如果大家有什么疑问或者指教,欢迎大家评论留言,0!谢谢大家!
网友评论