Tôi mới đến rxJava/Android và ngạc nhiên rằng onError
lambda của tôi đôi khi được gọi vào chính sợi và đôi khi không, mặc dù tôi sử dụng .observeOn(AndroidSchedulers.mainThread())
làm thế nào để xử lý các lỗi RxAndroid trong thread chính
Ví dụ 1 : onError
vào chính sợi
này hoạt động như mong đợi: onError
được gọi vào chính sợi
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());
});
log-đầu ra:
onError()-thread: main
Ví dụ 2: onError
KHÔNG vào chính sợi
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());
});
đầu ra là một cái gì đó như thế này:
onNext(one and only)-thread: main
onError()-thread: RxComputationScheduler-4
Tôi nghĩ rằng sau khi gọi observeOn(AndroidSchedulers.mainThread()), TẤT CẢ khí thải nên được thực hiện trên luồng chính.
vì vậy tôi có những câu hỏi này:
- tôi không thể tìm thấy bất kỳ tài liệu quy định cụ thể trong hoàn cảnh nào
onError
được gọi, trong đó chủ đề. Bất cứ ai cũng biết một liên kết? - Tôi thực sự muốn hiển thị một số dấu hiệu lỗi trong GUI: vậy làm thế nào tôi có thể buộc
onError
được LUÔN gọi trong chủ đề chính?
nhưng [observOn()] (http://reactivex.io/documentation/operators/observeon.html) nên ghi đè mặc định đó, đúng không? – TmTron