RxJava Android onError需要很长的时间才能调用
问题描述:
我在我的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
任何想法为什么?
答
发现问题。
没有在这里发布代码,因为没有认为它是相关的。事实上,它是。
之间operationalLayer.operationalConfig
和方法本身我有这样的:
@Override
public Observable<OerationalResponse> operationalConfig(OperationRequest operationalRequest) {
//Something
return network.opcoConfigs(opcoConfigRequest)
.retryWhen(//Something);
}
,我传递给retryWhen
我现在可以正确地处理错误的Func
里面,这样,如果没有网络连接,重试机制立即停止, InternetException
返回给用户。
+0
我有类似的问题,但我解决不了你的解释。请你看看:https://*.com/questions/46202300/retrofit-rxjava-takes-long-time-to-invoke-onerror-when -server-连接faile/46213362#46213362 –
您是否可以删除observeOn并使用Schedulers.io()进行subscribeOn并再次验证结果? –
@HansWurst尝试,但我相信它需要更多的时间。大概从20秒到差不多2分钟 – Favolas
嗯,我没有看到这里打破的东西。需要更多的代码来帮助调试。实际上,将operationalConfig中的所有内容都包装到Observable.defer中,以免阻止订阅。订阅上的onNext将在给定的调度程序上发生,但是输入和检查网络是否可用会在当前线程上发生。 –