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

2022-09-02 13:14:56

我有一个使用OkHttp的Android SDK。在使用我的 SDK 的示例应用中,一切正常。但是,我的一个用户在打开StrictMode时,会得到以下内容。我已尝试在自己的应用程序中复制此内容,并打开了StrictMode,但没有收到此错误。java.lang.Throwable: Explicit termination method 'close' not called

我知道我应该打电话,但我仍然有点困惑为什么我的应用程序中没有发生这种情况。他发送给我的堆栈跟踪中只有我的类,因此他的代码中似乎没有任何内容导致它。response.body().close()

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

还有其他原因可能导致这种情况吗?

我应该什么时候打电话?打电话后立即打电话是否可取?关闭正文是否会阻止将来被读取?.close()execute()


答案 1

您应该始终致电 。来自 OkHttp 的来源close()

调用方可以使用响应的方法读取响应正文。为了便于连接回收,呼叫者应始终关闭响应正文。Response.body()

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


答案 2

推荐