android - 安全智能的 http 连接断开

标签 android okhttp

在连接断开和重用方面,我有几个关于 OkHttp 的建议用法的问题。然而,关于这些问题的 Android 文档并不是很清楚。所以他们在这里:

  1. 安全的多线程断开:

(a) 根据 Android 文档:https://developer.android.com/reference/java/net/HttpURLConnection.html HttpUrlConnection 不是线程安全的。

然而,根据 OkHttp 的作者,从不是主动使用连接的线程终止 Activity 连接的推荐方法是调用 HttpUrlConnection.disconnect() 方法: https://github.com/square/okhttp/issues/1842 .

那么,除了主动使用连接的线程之外,是否可以从其他线程安全地调用此 API? Android 中集成的所有 OkHttp 版本都是这样吗?

(b) 在调用 disconnect() 之后,我们是否也应该通过调用 close() API 手动关闭 InputStream?还是一旦调用断开连接就不需要了?

  1. 关于套接字重用:确保连接可以重用的推荐方法是什么? Android 文档说明如下:

Once the response body has been read, the HttpURLConnection should be closed by calling disconnect(). Disconnecting releases the resources held by a connection so they may be closed or reused.

这意味着为了重用套接字,disconnect() 应该 被调用。

然而,这似乎与我读到的其他引用资料相矛盾,在这些引用资料中,为了重用连接,唯一需要关闭的资源是 InputStream,而实际上 disconnect() 不应该 被召唤。这也暗示在这里:https://github.com/square/okhttp/issues/702

最佳答案

在任何线程上调用 disconnect() 都是安全的,即使 HttpURLConnection 正被另一个线程使用。这会取消调用但不会释放其资源。

如果您创建了 HttpURLConnection,您必须在完成后关闭它。最好的方法是关闭输入流或错误流。您获得哪些取决于响应的状态代码。

关于android - 安全智能的 http 连接断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43166504/

相关文章:

android - 从 retrofit2 响应中获取 JSONObject

android - 如何修复 "End of stream on null"网络问题?

java - 如何在 OkHttp 中测试 IOException 情况?

android - 检索具有音频焦点更改的应用程序名称

android - 在运行时更改改造 okhttp 客户端

android - 搜索栏缩略图 onclicklistener

java - 使用JAVA在Android中打印ListView的ClickedItem的位置失败

android OkHttp 清除磁盘缓存图像条目

php - 使用 MpAndroid 库库从 MYSQL 获取的数据在 android 上创建图表

Android API 人脸检测 vs. OpenCV/JavaCV 人脸检测