Остановить HTTP-запросы в асинхронных задачах при изменении активности - PullRequest
0 голосов
/ 05 января 2012

Я загружаю несколько изображений в упражнении для заполнения списка, все в отдельных асинхронных задачах.В этом упражнении пользователь может нажать кнопку, чтобы перейти на другую страницу, которая не требует изображений.

Проблема, с которой я сталкиваюсь, заключается в том, что даже при переходе к следующему действию асинхронные задачи все еще выполняются, и httpclient не освобождается для запросов, которые необходимо выполнить в этом следующем действии.

Я пытался использовать asynctask.cancel для всех запущенных задач, но это выдает прерывание IExo.

Есть ли какой-либо другой изящный способ остановить запросы, которые делаются для освобождения клиента?

1 Ответ

1 голос
/ 22 января 2012

В идеале, что вы хотите сделать в подобных ситуациях - это обернуть ваши HTTP-запросы в цикл, который можно отменить. Используя этот вопрос в качестве примера (полная реализация там):

@Override
protected Void doInBackground(Void... params) {
  while (running) {
    // loop your HTTP requests here
  }
  return null;
}

Когда вы запускаете метод onCancelled() (вызывая cancel), ваш метод doInBackground завершает , как только по завершении текущего HTTP-запроса (и не раньше).

Вероятно, это будет самое изящное решение, которое вы собираетесь использовать, используя AsyncTask. Кроме того, вам может понадобиться поймать прерванное исключение где-нибудь в вашем классе AsyncTask, но этого должно быть достаточно, чтобы вы начали.

...