RxJava之執行緒切換
阿新 • • 發佈:2020-12-10
技術標籤:RxJavaRxJava執行緒切換RxJava之IoRxJava
RxJava執行過程是一個鏈條式的過程,中間可以自由的切換,預設不配置執行緒的時,預設上下游都在主執行緒,事件執行也是同步執行(上游發一次,西安下游就接收一次),如果配置了執行緒切換,則會變成非同步執行
執行緒切換主要用到的操作符
- Schedulers.io():代表io操作流,網路操作,檔案流,耗時操作
- Schedulers.newThread()常規的建立一個非同步執行緒
- Schedulers.computation()代表CPU大量計算所需要的的執行緒
- AndroidSchedulers.mainThread():專門為Androidmain執行緒定製的
示例1:
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(ObservableEmitter<Object> emitter) throws Exception {
}
}).subscribeOn(Schedulers.io())
.observeOn( AndroidSchedulers.mainThread())
.subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
}
});
示例2:
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(ObservableEmitter<Object> emitter) throws Exception {
}
}).subscribeOn(Schedulers.io())//todo 給上游設定非同步執行緒,只切換第一次,其他被忽略
.subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())//todo 給下游設定多次,每次都會切換
.observeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
}
});
示例3,下載一個圖片進行顯示到ImageView上的過程
String path="www.baidu.com";
Observable.just(path)
.map(new Function<String, Bitmap>() {
@Override
public Bitmap apply(String s) throws Exception {
try {
return BitmapFactory.decodeResource(getResources()
,R.drawable.ic_launcher_background);
}catch (Exception e){
return null;
}
}
})
.observeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Bitmap>() {
@Override
public void onSubscribe(Disposable d) {
//開始下載,顯示載入中
}
@Override
public void onNext(Bitmap bitmap) {
//載入成功
}
@Override
public void onError(Throwable e) {
//載入失敗時
}
@Override
public void onComplete() {
//關閉進度框
}
});
中間可以使用map操作符進行圖片的各種變換及日誌的記錄操作,整個流程,鏈路清晰,功能拆分