我在我的Android應用程序上使用RxJava
,我遇到onError
問題。RxJava Android onError需要很長的時間才能調用
我這樣做:
operationalLayer.operationalConfig(new OperationalRequest())
.subscribeOn(Schedulers.immediate())
.observeOn(Schedulers.immediate())
.subscribe(new CustomSubscriber<OperationalResponse>(bundle, null) {
@Override
public void onNext(OperationalResponse response) {
//Do something
super.onNext(response);
}
});
在某些時候,在operationalConfig
方法我檢查網絡連接是否可用,如果不是我返回一個錯誤。
public Observable<OperationalResponse> operationalConfig(final OperationalRequest operationalRequest) {
if (!Network.hasInternet()) {
Log.d("No available internet for operationalConfig");
return Observable.error(new NoInternetException());
}
return Observable.defer....
}
比,在我CustomSubscriber
我有這樣的:
@Override
public void onError(final Throwable e) {
if (e instanceof NoInternetException) {
// do something
Log.d("No internet connection available");
}
// other things
}
在日誌消息看我有一個巨大的延遲,因爲它檢測到沒有可用的互聯網連接和onError
方法被調用。
11-16 12:07:37.378 23779-24183 D/CustomTag: OperationalLayer No available internet for operationalConfig
11-16 12:07:57.459 23779-24416 D/CustomTag: CustomSubscriber No internet connection available
任何想法爲什麼?
您是否可以刪除observeOn並使用Schedulers.io()進行subscribeOn並再次驗證結果? –
@HansWurst嘗試,但我相信它需要更多的時間。大概從20秒到差不多2分鐘 – Favolas
嗯,我沒有看到這裏打破的東西。需要更多的代碼來幫助調試。實際上,將operationalConfig中的所有內容都包裝到Observable.defer中,以免阻止訂閱。訂閱上的onNext將在給定的調度程序上發生,但是輸入和檢查網絡是否可用會在當前線程上發生。 –