我正在使用ThreadSafeClientConnManager来管理客户端连接池,因为我的应用程序有多个线程同时连接到Web服务器。
抽象示例代码:
现在假设其中一个线程正在下载一个大文件,但是我的应用程序的用户切换到另一个活动/屏幕。因此,该文件是无用的,我想中止此下载连接。
在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);
一样?我已经阅读了文档并尝试了许多不同的方法,但我无法获得一个可行的解决方案。因此,任何建议和/或代码示例都将不胜感激。