【发布时间】:2016-07-06 14:58:49
【问题描述】:
我想为网络调用创建一种指数退避。 但不是通常的退避间隔,我的网络调用应该重复几次(延迟增加)然后完成 - 无论网络调用的结果是什么。
例如,默认情况应如下所示:
→ wait 1s → network call → onNext(result)
→ wait 3s → network call → onNext(result)
→ wait 10s → network call → onNext(result)
→ onCompleted
当某些网络调用出现错误时,应记录这些错误,但不会中止任务本身。假设第二个网络调用有错误,那么它应该是这样的:
→ wait 1s → network call → onNext(result)
→ wait 3s → network call error → log error
→ wait 10s → network call → onNext(result)
→ onCompleted
当所有调用都有错误时:
→ wait 1s → network call error → log error
→ wait 3s → network call error → log error
→ wait 10s → network call error → log error
→ onCompleted
我已经有一个可以调用网络的 Observable,代码如下:
public Observable<Stuff> loadStuff() {
Request request = new Request.Builder()
.url("http://example.com/stuff").build();
return myCall(request, Stuff.class);
}
public <T> Observable<T> myCall(Request request, Class<T> resultClass) {
// calls OkHttp3 and parses the result
return okhttp(request)
.flatMap(parseResponse(resultClass));
}
如何重复使用来自loadStuff() 的 Observable 来实现我想要的退避间隔?
【问题讨论】:
标签: java android network-programming rx-java reactivex