在连接断开和重用方面,我对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文档指出以下内容:
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
解决方法:
即使在另一个线程正在使用HttpURLConnection的情况下,也可以在任何线程上调用disconnect()是安全的.这会取消通话,但不会释放其资源.
如果创建了HttpURLConnection,则必须在使用完后将其关闭.最好的方法是关闭输入流或错误流.您将获得哪种结果取决于响应的状态码.