何时调用response.body()。close()

时间:2015-08-18 18:34:46

标签: java android okhttp

我有一个使用OkHttp的Android SDK。在我使用我的SDK的示例应用程序中,一切正常。但是,我的一位用户在启用StrictMode时获得以下java.lang.Throwable: Explicit termination method 'close' not called。我已经尝试在我自己的应用程序中使用StrictMode复制它,并且不会出现此错误。

我知道我应该打电话给response.body().close(),但我仍然对我的应用中没有发生这种情况的原因感到困惑。他发给我的堆栈跟踪只有我的类,所以看起来他的代码中的任何内容都不会导致它。

另外值得注意的是,我的SDK中只有一个请求实际上已经读取了响应。但这不是我的用户所说的引起异常的请求。

还有什么可能导致这个吗?

我应该何时致电.close()?在调用execute()之后立即调用它是否可取?关闭身体是否会阻止它在将来被阅读?

1 个答案:

答案 0 :(得分:10)

您应该始终致电close()。来自OkHttp's source

  

来电者可以使用回复Response.body()方法阅读回复正文。为了便于连接回收,呼叫者应始终关闭响应主体。

您应该在完成从响应中获得所需内容后立即致电close()。将其存储在变量中,然后关闭ResponseBody