我正在执行一堆相关的网络调用(其中一个也具有重试机制),而我面临的问题是整个程序需要花费很多时间来执行,并且导致用户质量下降经验。 我在下面用伪代码发布了链条的外观,希望有人对如何改进它有所了解。
这是主要要求:
public void doNetworkRequest(){
getRetrofitSingle1().toFlowable()
.flatMap(firstResponse -> getStatusFlowable(firstResponse.getId()))
.flatMapSingle(secondResponse ->
Completable.mergeArray(getCompletable1().subscribeOn(Schedulers.io()),
getCompletable2().subscribeOn(Schedulers.io()),
getCompletable3().subscribeOn(Schedulers.io())
).andThen(Single.just(secondResponse)))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response ->{
//do light stuff
})
}
这些是每个通话的详细信息:
private Flowable getStatusFlowable(){
getRetrofitSingle2().repeatWhen(completed -> completed.delay(5, TimeUnit.SECONDS))
.doOnEach(consumer -> ++retryCount)
.takeUntil(response ->{
return !response.shouldRepeat() || retryCount >= 5;
})
.filter(response -> !response.shouldRepeat())
.subscribeOn(Schedulers.io())
}
其余的都是简单的单身并且可以完成:
private Single getRetrofitSingle1(){
//returning retrofit single
}
private Single getRetrofitSingle2(){
//returning another retrofit single
}
private Completable getCompletable1(){
//returning retrofit completable
}
private Completable getCompletable2(){
//returning another retrofit completable
}
private Completable getCompletable3(){
//save to local storage
}
如果您对我可能想念的细节有任何想法或疑问,请告诉我。 谢谢