一个包含所有拦截器的 OkHttpClient 与多个包含特定拦截器的 OkHttpClient

dav*_*nry 7 android okhttp retrofit2

我有许多不同的 OkHttpClient 请求拦截器。每个拦截器仅适用于应用程序发出的网络请求的子集。到目前为止,我已经想出了两种可能的设计。我是不是该:

  • 将每个拦截器附加到单个 OkHttpClient 客户端。

或者

  • 克隆每组拦截器的客户端,以便每个 OkHttpClient 仅具有这些请求所需的拦截器。

谢谢!

Yur*_*mke 3

我会主张第一种情况,因为它是

  1. 客户端使用更简单,只需管理一个客户端。
  2. 清理更简单(关闭调度程序、连接池)
  3. 适用于跨主机的重定向。

只需让每个拦截器使用条件检查即可。

AFAIK 连接池可以在您克隆的 OkHttpClient 实例之间共享,例如 client.newBuilder().x(...).build(),前提是您不执行更改 SSLContext 之类的操作。

  • newBuilder 共享资源。请参阅 https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html “使用 newBuilder() 自定义您的客户端” (2认同)