java - 何时调用 response.body().close()

标签 java android okhttp

我有一个使用 OkHttp 的 Android SDK。在使用我的 SDK 的示例应用程序中,一切正常。然而,当 StrictMode 开启时,我的一位用户收到以下消息 java.lang.Throwable: Explicit termination method 'close' not called。我已经尝试在我自己的应用程序中复制它并启用 StrictMode,但没有出现此错误。

我知道我应该调用 response.body().close() 但我仍然有点困惑为什么我的应用程序中没有发生这种情况。他发给我的堆栈跟踪中只有我的类,所以看起来他的代码中没有任何东西是导致它的原因。

另请注意,我的 SDK 发出的请求中只有一个实际读取了响应。但这不是我的用户所说的导致异常的请求。

是否还有其他可能导致此问题的原因?

我应该什么时候调用.close()?在调用 execute() 之后立即调用它是否可取?关闭正文会阻止它在未来被读取吗?

最佳答案

您应该始终调用close()。来自 OkHttp's source :

The caller may read the response body with the response's Response.body() method. To facilitate connection recycling, callers should always close the response body.

您可能应该在从响应中获得所需内容后立即调用 close()。将其存储在变量中,然后关闭 ResponseBody

关于java - 何时调用 response.body().close(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32080181/

相关文章:

java - 为任何 JSP 异常发送 500 错误

javascript - 如何在 spring boot 中将映射从本地存储传递到 Controller ?

android - Gradle 无法解析 Android Studio 中的依赖项

java - 使用 Kotlin 使用 OkHttp 发送 JSON 数据

android - 使用 OkHttpClient 发送 cookie

Java throttle "Consumer"线程

java - 在 Spring Boot 中获取对当前 Activity 数据源的引用

android - 如何禁用 WebView 的点击?

java - HttpGet/客户端和 HTTPS

android - Firebase 未报告与 OkHttp 相关的崩溃