连接失败时 okhttp 静默重试问题

Issue with okhttp silent retry on connection failure

我们在 okhttp 重试请求方面遇到了一些问题。根据我们的崩溃报告日志,我们的大多数客户都收到了太多此类异常。

他们抱怨的是数据上传到服务器了,但是手机上还是显示没有上传。我研究了一下,发现 okHttp 正在重试连接失败的请求,我猜它与这个主题有关。调试应用程序时无法创建案例。我已经尝试连接到 10.10.10.1,它正在获取套接字超时,但似乎 okhttp 不会重试此请求。它只是 returns 这一行 if (!streamAllocation.hasMoreRoutes()) return false; (okhttp v3.12.1)。我在 logcat 或听诊器中看不到任何重试日志。如何重现这个案例?在这种情况下 okHttp 应该重试吗?在这种情况下禁用重试会有帮助吗?

根据这篇文章 https://medium.com/inloopx/okhttp-is-quietly-retrying-requests-is-your-api-ready-19489ef35ace

You will not get notified about these silent retries. The server can receive multiple requests even though you made only a single request.

我成功地根据okhttp标准测试复制了这个案例。这是测试https://gist.github.com/androideveloper/b411d9e90cb8ad430148a906890d0c90。它静默重试 2 次。如果将日志记录拦截器安装为网络拦截器,则日志可用。