如果每个请求都有改造实例,会发生什么?

时间:2017-03-18 18:02:22

标签: android rx-java retrofit2

我最近在考虑一个问题。

如果每个请求都有一个改造实例,会发生什么?

我希望每个请求的原因都有一个改进实例:

每个改造实例都有一个 OkHttpClient实例,所以我想要添加 拦截到OkhttpClient,但不是每个请求都应该是 拦截,我还想向OkHttpClient添加一些相同的标题,但不是每个请求都必须包含这些相同的标题,就像它的登录请求一样,我不需要添加令牌。但是其他请求可能需要。

所以我的方法是让每个请求都有一个改装实例,之前我有一个演示,但请求的数量很少,所以我不确定是否如果请求太多会遇到麻烦

我有两个问题:

1。它会产生一些异常吗?或者是否会导致堆栈溢出?

2. 如果有更好的方法可以解决问题吗?

是否有其他人有相同的经历或有疑问?

1 个答案:

答案 0 :(得分:2)

您可以使用@Headers注释向Retrofit添加静态/动态标头。此外,您不应该像文档中所述创建单独的OkHttp实例:

  

当您创建单个OkHttpClient实例并将其重用于所有HTTP调用时,OkHttp的效果最佳。这是因为每个客户端都拥有自己的连接池和线程池。重用连接和线程可减少延迟并节省内存。相反,为每个请求创建客户端会浪费空闲池上的资源。

如果您想为每个OkHttp配置不同的配置,请使用client.newBuilder()(可从3.x版本获得):

  

您可以使用newBuilder()自定义共享的OkHttpClient实例。这将构建一个共享相同连接池,线程池和配置的客户端。使用构建器方法为特定目的配置派生客户端。

如果@Headers不适合您,只需创建OkHttpClient的任意数量的配置,就可以创建不同的Retrofit服务,您就可以了。

http://square.github.io/okhttp/3.x/okhttp/