在Rxjava 中使用Schedulers 对线程进行切换。
其中需要使用到两个方法 observeOn 、 subscribeOn
1:subscribeOn:当我们创建好 观察者和被观察者后,调用 subscribe 订阅事件时,整个事件开始执行.
默认线程为执行订阅的当前线程,而subscribeOn是指定订阅事件所在运行线程。
2:observeOn :设置回调事件运行所在线程,可以在多个回调事件设置不同线程,在回调事件前调用即可。
如果不设置,默认为subscribe所使用的线程
测试Code:
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
printThread("OnSubscribe--call");
subscriber.onNext("");
}
}).subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
printThread("map");
return 1;
}
})
.observeOn(Schedulers.newThread())
.flatMap(new Func1<Integer, Observable<String>>() {
@Override
public Observable<String> call(Integer integer) {
printThread("flatMap");
return Observable.just(false).map(new Func1<Boolean, String>() {
@Override
public String call(Boolean aBoolean) {
printThread("map2");
return null;
}
});
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
printThread("onNext");
}
});
输出:
OnSubscribe--call -->:RxIoScheduler-2
map -->:RxComputationScheduler-1
flatMap -->:RxNewThreadScheduler-1
map2 -->:RxNewThreadScheduler-1
onNext -->:main