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