android - 连接失败时 okhttp 静默重试的问题
问题描述
我们对 okhttp 重试请求有一些问题。根据我们的崩溃报告日志,我们的大多数客户都收到了太多此类异常。
他们抱怨的是数据已上传到服务器,但移动设备仍显示为未上传。我研究了一下,发现 okHttp 正在重试连接失败的请求,并猜测它与这个主题有关。调试应用程序时无法创建案例。我试图连接到 10.10.10.1,它正在获取套接字超时,但似乎 okhttp 没有重试这个请求。它只是在这一行返回if (!streamAllocation.hasMoreRoutes()) return false;
(okhttp v3.12.1)。我在 logcat 或 stetho 中看不到任何重试日志。如何重现这种情况?在这种情况下,okHttp 是否应该重试?在这种情况下禁用重试会有所帮助吗?
根据这篇文章https://medium.com/inloopx/okhttp-is-quietly-retrying-requests-is-your-api-ready-19489ef35ace
您不会收到有关这些静默重试的通知。即使您只发出一个请求,服务器也可以接收多个请求。
解决方案
我设法根据 okhttp 标准测试复制了该案例。这是测试https://gist.github.com/androideveloper/b411d9e90cb8ad430148a906890d0c90。它静默重试 2 次。如果日志拦截器安装为网络拦截器,则日志可用。
推荐阅读
- c++ - boost文件系统路径中的分段错误
- android - 用户单击关闭按钮时如何在应用程序更新立即模式下处理?
- reactjs - 即使只有一个文档被添加到 firebase,也会显示重复的任务
- javascript - 如何在顶部滚动表单面板?
- angularjs - 如何添加自定义组件 ngFormBuilder Form.io
- sql - 带有 IN 子句的区分大小写的搜索查询 - SQL Server
- python - 如何在 OpenCV_2 中启动简要提取器
- r - 引用另一个工作表中的单元格
- slack-api - Slack 登录按钮 + 最大应用集成。它是如何工作的?
- regex - 如何在.net mvc模型中制作多个正则表达式?