版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/ContainsK/article/details/73605660
在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