私はRxJava
をAndroidアプリで使用していますが、onError
に問題があります。RxJava Android onErrorの呼び出しに時間がかかりすぎる
私はこれやってる:ネットワーク接続が利用できると、私はエラーを返していない場合であれば、私はチェックoperationalConfig
方法では、いくつかの点で
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);
}
});
を。
@Override
public void onError(final Throwable e) {
if (e instanceof NoInternetException) {
// do something
Log.d("No internet connection available");
}
// other things
}
は、利用可能なインターネット接続がないことを検出しますと
onError
メソッドが呼び出されているので、私は巨大な遅延を有するログメッセージを見る:
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
に私はこれを持っています。
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を削除し、subscribeOnのSchedulers.io()を使用して、結果を再度検証できますか? –
@HansWurst試してみましたが、もっと時間がかかると思います。おおよそ20秒からほぼ2分まで – Favolas
うん、ここで何か壊れているのを見ない。デバッグに役立つコードがさらに必要になります。実際には、operationalConfig内のすべてをObservable.deferにラップして、サブスクリプションをブロックしないようにします。サブスクリプションのonNextは、指定されたスケジューラーで発生しますが、ネットワークが使用可能かどうかの入力と検査は、現在のスレッドで行われます。 –