Есть ли способ остановить выполнение HttpClient в AsyncTask? - PullRequest
5 голосов
/ 22 июня 2011

У меня есть AsyncTask, который обрабатывает довольно долгую загрузку, используя HttpClient. Я хотел бы остановить выполнение этого запроса, если пользователь завершает действие, которое его запускает. Как мне этого добиться?

Итак, я запустил AsyncTask, HttpClient находится в execute (), обрабатывает запрос GET, есть ли способ прекратить это?

Ответы [ 2 ]

5 голосов
/ 27 июня 2012
  1. Позвоните AsyncTask#cancel, чтобы отменить отложенное задание
  2. в соответствии с Документами HttpClient , используйте HttpUriRequest#abort() для отмены http-запроса

1.4. Отмена запросов

В некоторых ситуациях выполнение HTTP-запроса не завершается в течение ожидаемого периода времени из-за высокой нагрузки на целевом сервере или слишком большого числа одновременных запросов, выдаваемых на стороне клиента. В таких случаях может возникнуть необходимость преждевременно завершить запрос и разблокировать поток выполнения, заблокированный в операции ввода-вывода. HTTP-запросы, выполняемые HttpClient, можно прервать на любом этапе выполнения, вызвав метод HttpUriRequest # abort (). Этот метод является потокобезопасным и может быть вызван из любого потока. Когда HTTP-запрос прерывается, его поток выполнения - даже если в данный момент заблокирован в операции ввода-вывода - гарантированно разблокируется, генерируя исключение InterruptedIOException

4 голосов
/ 22 июня 2011

В асинхронной задаче есть вызов отмены, который вы можете переопределить.Оттуда вы можете получить свой HttpClient и закрыть поток.

...