关于连接断开和重用的问题,我对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吗?或者一旦断开连接就不需要这个吗?
一旦读取了响应主体,就应该是HttpURLConnection 通过调用disconnect()关闭。断开连接释放资源 由连接保持,以便它们可以被关闭或重复使用。
这意味着为了重用套接字,应该调用disconnect()
。
然而,这似乎与我读到的其他引用相矛盾,为了重用连接,需要关闭的唯一资源是InputStream,实际上disconnect()不应该被叫。这也暗示了这一点:https://github.com/square/okhttp/issues/702
答案 0 :(得分:4)
在任何线程上调用disconnect()
是安全的,即使在另一个线程正在使用HttpURLConnection时也是如此。这会取消呼叫,但不会释放其资源。
如果您创建了HttpURLConnection,则必须在完成后关闭它。执行此操作的最佳方法是关闭输入流或错误流。您获得以下哪些取决于响应的状态代码。