我正在使用ThreadSafeClientConnManager来管理客户端连接池,因为我的应用程序有多个线程,它们同时连接到网络服务器。
抽象示例代码:
HttpClient httpClient;
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(parameters,schReg);
httpclient = new DefaultHttpClient(conMgr, parameters);
现在让我们说这个线程正在下载一个大文件,但是我的应用程序的用户正在切换到另一个活动/屏幕。因此该文件是不必要的,我想中止这个下载连接。
在ThreadSafeClientConnManager我发现了这个方法:
public ClientConnectionRequest requestConnection (HttpRoute route, Object state)
返回一个新的 ClientConnectionRequest,可以从中获取 ManagedClientConnection 或者可以中止请求。
到目前为止,我一直在使用:
HttpGet httpRequest = new HttpGet(URL_TO_FILE);
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
[...]
现在据我了解,我必须使用:
httpclient.getConnectionManager().requestConnection(HttpRoute route, Object state);
这就是我卡住的地方。我假设对于我可以使用的路线new HttpRoute(new HttpHost("10.0.0.1"))
或我的服务器是什么,但是要输入什么Object state
?
第二,只要我有ClientConnectionManager
我就可以打电话getConnection(long timeout, TimeUnit tunit)
。HttpGet httpRequest = new HttpGet(URL_TO_FILE);
但是从那里开始,我如何像以前一样执行我的HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
?
我已经浏览了文档并尝试了很多不同的东西,但我无法获得有效的解决方案。因此,任何建议和/或代码示例都非常受欢迎。