私のアプリケーションには複数のスレッドがあり、それらが同時にWebサーバーに接続しているため、ThreadSafeClientConnManagerを使用してクライアント接続のプールを管理しています。
抽象サンプルコード:
HttpClient httpClient;
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(parameters,schReg);
httpclient = new DefaultHttpClient(conMgr, parameters);
ここで、このスレッドの1つが大きなファイルをダウンロードしているとしましょう。しかし、私のアプリケーションのユーザーは別のアクティビティ/画面に切り替えています。そのため、ファイルは不要であり、このダウンロード接続を中止したいと思います。
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);
ますか?
私はドキュメントを読み、かなりの数の異なることを試しましたが、実用的な解決策を得ることができませんでした。そのため、提案やコード例は大歓迎です。