【发布时间】:2017-04-03 15:49:04
【问题描述】:
我有几个关于 OkHttp 的建议用法的问题,在连接断开和重用方面。然而,关于这些问题的 Android 文档并不那么清楚。所以他们在这里:
- 安全多线程断开:
(a) 根据 Android 文档:https://developer.android.com/reference/java/net/HttpURLConnection.html HttpUrlConnection 不是线程安全的。
然而,根据 OkHttp 的作者的说法,从不是主动使用连接的线程终止活动连接的推荐方法是调用 HttpUrlConnection.disconnect() 方法:https://github.com/square/okhttp/issues/1842。
那么,除了主动使用连接的线程之外,是否可以从其他线程安全地调用此 API?是否适用于所有集成到 Android 中的 OkHttp 版本?
(b) 在调用disconnect() 之后,我们是否也应该通过调用 close() API 来手动关闭 InputStream?还是在调用断开连接后不需要这样做?
- 关于套接字重用:确保连接可以重用的推荐方法是什么? Android 文档声明如下:
读取响应正文后,HttpURLConnection 应该是 通过调用 disconnect() 关闭。断开连接释放资源 由连接持有,因此它们可以被关闭或重用。
这意味着为了重用套接字,应该调用disconnect() 。
然而,这似乎与我读到的其他参考资料相矛盾,为了重用连接,唯一需要关闭的资源是 InputStream,实际上 disconnect() 不应该 被召唤。这也暗示在这里:https://github.com/square/okhttp/issues/702
【问题讨论】: