Я использую AsyncTask
для инициализации AndroidHttpClient
и выполняю запрос POST в doInBackground()
. Я хочу, чтобы пользователь мог отменить запрос, нажав кнопку "Назад". AsyncTask
имеет метод cancel()
, который только изменяет логическое возвращаемое значение isCancelled()
, а затем ждет завершения doInBackground()
до вызова onCancelled()
. Это означает, что AsyncTask
возвращает его к методу doInBackground()
, чтобы постоянно проверять отмену задачи (используя isCancelled()
). Если он был отменен, doInBackground()
должен вернуться преждевременно. Проблема, с которой я сталкиваюсь, заключается в том, что 99% выполнения рабочего потока в doInBackground()
останавливается:
HttpResponse response = httpClient.execute(request[0]);
поскольку этот вызов синхронной функции инкапсулирует сетевые аспекты запроса. Как я могу отменить запрос на полпути через?
Я рассматриваю попытку изменить время ожидания во время запроса, но это кажется небезопасным.
Я также рассматриваю возможность переопределения метода AsyncTask
cancel()
, который может работать лучше.
Любые предложения?