先了解下概念
小案例
Subscription subscription = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
System.out.println(Thread.currentThread().getName());
if (!subscriber.isUnsubscribed()) {
subscriber.onNext("1");
subscriber.onNext("2");
subscriber.onCompleted();
}
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
System.out.println("onError");
}
@Override
public void onNext(String s) {
System.out.println(Thread.currentThread().getName());
System.out.println("onNext:" + s);
}
});
1.0 的 Scheduler
- Scheduler 是一个抽象类
关键 | 描述 |
---|---|
Workerr | 真实做线程调度的类 |
Action0 | 在线程中执行的操作 |
schedule | 实际做线程调度的方法,入参为 Action0 |
调度这源码分析:
- 传入不同Scheduler来使用不同的线程
- 用Scheduler创建Worker来使用真正的线程池
- 传入具体操作的Action0
- 通过Schedule方法来实现调度
subscribeOn 调度图
https://www.processon.com/diagraming/5afd2fe3e4b05352c2c3f981
下面只是很初略的流程,最要看上面的调度图
我这里采用回溯流程 梳理
Observable对象.subscribe(new Observer<String>() {....});
也就解释了,subscribeOn 的线程 调度
observeOn 调度图
https://www.processon.com/view/link/5afe26b2e4b05352c2c5eb0d