我最近在考虑一个问题。
如果每个请求都有一个改造实例,会发生什么?
我希望每个请求的原因都有一个改进实例:
每个改造实例都有一个 OkHttpClient实例,所以我想要添加 拦截到OkhttpClient,但不是每个请求都应该是 拦截,我还想向OkHttpClient添加一些相同的标题,但不是每个请求都必须包含这些相同的标题,就像它的登录请求一样,我不需要添加令牌。但是其他请求可能需要。
所以我的方法是让每个请求都有一个改装实例,之前我有一个演示,但请求的数量很少,所以我不确定是否如果请求太多,会遇到麻烦?
我有两个问题:
1。它会产生一些异常吗?或者是否会导致堆栈溢出?
2. 如果有更好的方法可以解决问题吗?
是否有其他人有相同的经历或有疑问?
答案 0 :(得分:2)
您可以使用@Headers
注释向Retrofit
添加静态/动态标头。此外,您不应该像文档中所述创建单独的OkHttp
实例:
当您创建单个OkHttpClient实例并将其重用于所有HTTP调用时,OkHttp的效果最佳。这是因为每个客户端都拥有自己的连接池和线程池。重用连接和线程可减少延迟并节省内存。相反,为每个请求创建客户端会浪费空闲池上的资源。
如果您想为每个OkHttp
配置不同的配置,请使用client.newBuilder()
(可从3.x版本获得):
您可以使用newBuilder()自定义共享的OkHttpClient实例。这将构建一个共享相同连接池,线程池和配置的客户端。使用构建器方法为特定目的配置派生客户端。
如果@Headers
不适合您,只需创建OkHttpClient
的任意数量的配置,就可以创建不同的Retrofit
服务,您就可以了。