使用Retrofit进行并行HTTP请求

Vek*_*r88 15 java rest android retrofit

我有一个Android应用程序,当前正在使用Volley库来发出网络请求并显示下载的图像NetworkImageView.

我想测试其Retrofit功能,因为我需要运行大量请求(数千)我对并行执行有点担心.Volley处理并行请求,将RequestQueue并发运行请求限制为4,而其他请求则排队等待执行.在Retrofit文档中我没有找到任何方法来处理并发请求的数量,我怀疑这些细节留给了这个库中的开发人员.

它是否正确?如果是这样,是否有任何面向android的实现/库可用?否则,处理并行请求的最佳做法是什么?

Jak*_*ton 39

Retrofit使用一个Executor排队请求.

默认使用Executors.newCachedThreadPool允许无限制的线程.这适用于大多数用例,因为通常情况下您只会同时发生一个或两个请求.

但是,您可以通过在构建时提供自己的行为来更改此行为RestAdapter.调用setExecutors并传入使用受限线程池的执行程序(限制为您想要的任何数字).对于第二个参数,只需传递一个新实例,MainThreadExecutor以便在主线程上发生回调.

  • **改造2.0**是否使用`Executors#newCachedThreadPool`? (9认同)
  • 是.使用无界队列将解决1和2.在`java.util.concurrent`中有一些可供选择. (3认同)
  • ```RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(SomeEndpoint).setExecutors(Executors.newFixedThreadPool(5),null).build(); ```注意第二个arg是回调执行程序 - 这会将回调放在与客户端相同的线程上.http://square.github.io/retrofit/javadoc/retrofit/RestAdapter.Builder.html#setExecutors-java.util.concurrent.Executor-java.util.concurrent.Executor- (3认同)