Android Retrofit 我有时会得到 ECONNRESET,我不知道为什么

标签 android retrofit2 okhttp

我从后端公司收到伪随机 ECONNRESET。我说伪随机是因为我认为它的发生方式与我几乎每次都可以通过发起大量请求来激发它的方式不同。

我通常从 Activity 的生命周期事件中启动下载,因此我使用 RetrofitCall.enqueue() 在后台联网。在似乎引起麻烦的代码部分,我从后台线程启动了一系列下载(json 的 ~15 个 REST 路由和 5-6 个文件)。在这种情况下,ECONNRESET 出现 3 次尝试中的 2 次尝试其中一个被调用的 REST 路由。

服务器端没有更多的解释,我们记录的唯一内容是读/写 ECONNRESET。

这是我试过的:

  • 更新到 okhttp 3.5.0(来自 3.2.0)并改造 2.1.0(来自 2.0.2)
  • 我在请求 header 中添加了“Connection:close”以防止保持 Activity 状态。
  • 我将我的总池减少到 1: .connectionPool(new ConnectionPool(0, 1, TimeUnit.SECONDS))

它发生在我的手机(Android 6)上,我没有其他手机来测试代码。我的 AVD 有一些不相关的问题,导致我无法在不同的 Android 版本上进行测试(即将修复)。

您知道什么会引起这种情况吗?

谢谢,

最佳答案

作为记录,我在我的文件下载方法中使用了 HttpURLConnection(而我的 REST api 通过改造和 okhttp 受到质疑),我将其更改为 okHttp 并且它是现在一切都好。

关于Android Retrofit 我有时会得到 ECONNRESET,我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40936290/

相关文章:

gradle - 在干净的生成版本中找不到符号

android - 协程 : Overriding OKHttp's dispatcher to use AsyncTasks's ThreadPoolExecutor so Espresso can assert successfully

android - Multidex 项目中几个新的 Proguard 问题 Google Play 服务 v10.2.6 到 v11.0.0

android - 使用 Retrofit(Okhttp) 时,如何从 android studio 中的 log cat 复制请求正文、 header (无标签)?

android - 如何为每个选项卡刷新 ViewPager?

android - 如何避免在 getView() 中设置内联 onClickListener

java.lang.NumberFormatException : Expected an int but was 0. 6 在第 1 行第 8454 列

java - Android 以编程方式向应用程序添加小部件警告消息

java - 计算当前连胜 - sqlite

android - 如何使用retrofit获取Json数据?