Rx Java依赖的网络调用

时间:2019-12-09 14:54:42

标签: android performance retrofit2 rx-java2

我正在执行一堆相关的网络调用(其中一个也具有重试机制),而我面临的问题是整个程序需要花费很多时间来执行,并且导致用户质量下降经验。 我在下面用伪代码发布了链条的外观,希望有人对如何改进它有所了解。

这是主要要求:

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
}

如果您对我可能想念的细节有任何想法或疑问,请告诉我。 谢谢

0 个答案:

没有答案