我是新來rxJava/Android和驚訝,我onError
拉姆達有時也被稱爲主線程上,有時不是,雖然我用.observeOn(AndroidSchedulers.mainThread())
如何處理RxAndroid錯誤在主線程
例1 :onError
在主線程
此按預期工作:onError
被稱爲主線程上
Observable.error(new RuntimeException("RTE"))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> {
Log.e(TAG, "onNext("+s+")-thread: " + Thread.currentThread().getName());
},
throwable -> {
Log.e(TAG, "onError()-thread: " + Thread.currentThread().getName());
});
日誌輸出:
onError()-thread: main
例2:onError
不是在主線程
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("one and only");
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.timeout(1, TimeUnit.SECONDS)
.subscribe(s -> {
Log.e(TAG, "onNext("+s+")-thread: " + Thread.currentThread().getName());
},
throwable -> {
Log.e(TAG, "onError()-thread: " + Thread.currentThread().getName());
});
輸出是這樣的:
onNext(one and only)-thread: main
onError()-thread: RxComputationScheduler-4
我認爲叫observeOn(AndroidSchedulers.mainThread())後,所有排放應在主線程上完成。
,所以我有以下問題:
- 我找不到那在什麼情況下
onError
被稱爲在哪個線程指定的任何文件。任何人都知道鏈接? - 我當然想在GUI中顯示一些錯誤指示:那麼我如何強制
onError
總是在主線程中調用?
但[observeOn()](http://reactivex.io/documentation/operators/observeon.html)應該覆蓋該默認值,對吧? – TmTron