我有一个使用 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/