我在我的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将在给定的调度程序上发生,但是输入和检查网络是否可用会在当前线程上发生。 –