我想使用RxJava(实际上是RxJava2)来定期发送网络(HTTP)请求。第一次尝试或多或少看起来像这样(改编自source):
Observable.interval(5, TimeUnit.SECONDS, Schedulers.io())
.map(tick -> sendNetworkRequest())
这将每5秒调用一次sendNetworkRequest。
但是,如果sendNetworkRequest()需要一些时间才能完成(例如,在慢速的网络上,或者有多次重试。),请求将重叠。
我想做的是确保两次请求之间的间隔为5秒,即从上一个请求的结束到下一个请求的开始。
如何使用RxJava做到这一点?
答案 0 :(得分:1)
使用repeatWhen
Observable.fromCallable(sendNetworkRequest())
.repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS));