2012-01-05 2 views
0

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

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

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

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

Остановить HTTP-запросы в задачах async при изменении активности

+0

Реализовать потоки и исходное решение из следующего вопроса stackoverflow. http://stackoverflow.com/questions/680180/whe re-to-stop-destroy-threads-in-android-service -class – wurde

ответ

1

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

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

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

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

+0

Есть ли способ прервать текущий запрос hTTP ..? – Rookie

+0

Действительно прекрасное решение ... – ed209

Смежные вопросы