2011-06-22 8 views
5

私は、HttpClientを使用してかなり長いダウンロードを処理するAsyncTaskを持っています。ユーザーが開始するアクティビティを完了した場合、このリクエストの実行を停止したいと思います。どうすればこれを達成できますか?AsyncTaskでHttpClientの実行を停止する方法はありますか?

私はAsyncTaskを開始しました.HttpClientはexecute()内にあり、GETリクエストを処理していますが、これを終了する方法はありますか?

+0

ストリームをクローズしようとしましたか? – mibollma

答えて

4

非同期タスクには、オーバーライドできるキャンセル呼び出しがあります。そこからあなたのHttpClientにアクセスしてストリームを閉じることができます。

+0

?私はhttpクライアントにアクセスできますが、そのような方法はありません:/ – feresr

+2

これはうまく動作しません。 'HttpClient.Execute'は呼び出しをブロックします。 'OnCancelled'はHttpClientがロックを解除するまで呼び出されません。 – xmen

+0

右、これは実際には、要求を中断することは動作しません、あなたは以下の解答ごとにアボート()を使用する必要があります。 – chrisdowney

5
    httpリクエスト

1.4を中止するHttpUriRequest#abort()を使用し、HttpClient docsによると、保留中のタスク

  • を廃棄する
  • コールAsyncTask#cancel。 HTTPリクエストの実行が原因ターゲット・サーバー上の高負荷またはクライアント側で発行され、あまりにも多くの同時要求に予想される時間枠内に完了しなかったいくつかの状況で要求

    を中止します。そのような場合は、要求を早期に終了し、I/O操作でブロックされた実行スレッドのブロックを解除する必要があります。 HttpClientによって実行されているHTTPリクエストは、HttpUriRequest#abort()メソッドを呼び出すことによって、実行のどの段階でも中止できます。このメソッドはスレッドセーフであり、任意のスレッドから呼び出すことができます。 HTTP要求が中止されると、実行スレッドは、現在I/O操作でブロックされていても、InterruptedIOExceptionをスローすることによってブロック解除されます。