Как мне отменить HTTP-запрос Android?

Я использую AsyncTask для инициализации AndroidHttpClient и выполнения запроса POST в doInBackground () . Я бы хотел, чтобы пользователь мог отменить запрос, нажав кнопку "Назад". AsyncTask имеет метод cancel () , который изменяет только логическое возвращаемое значение isCancelled () , а затем ожидает, пока doInBackground () будет завершить перед вызовом onCancelled () . Это означает, что AsyncTask оставляет на усмотрение метода doInBackground () постоянную проверку того, была ли задача отменена (с помощью isCancelled () ). Если он был отменен, doInBackground () должен вернуться раньше времени. У меня проблема в том, что на 99% выполнение рабочего потока в doInBackground () останавливается на:

HttpResponse response = httpClient.execute(request[0]);

, поскольку этот синхронный вызов функции инкапсулирует сетевые аспекты запроса. Как я могу отменить запрос на полпути?

Я подумываю о попытке изменить время ожидания во время запроса, но это кажется опасным для потока.

Я также подумываю отменить метод AsyncTask cancel () , который может работать лучше.

Есть предложения?

14
задан erakitin 18 June 2014 в 07:24
поделиться