Вызывая группу AsyncTask, есть ли способ узнать, когда они все закончили, чтобы показать сообщение?

1

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

Если бы у меня был только один AsyncTask, это был бы знатока, я бы поставил свой код на сообщение в onPostExecute(), но теперь у меня их много.

Итак, есть ли способ узнать, когда все потоки AsyckTast закончены, чтобы я мог показать свое сообщение?

Спасибо за ответ в ответ, как вы могли догадаться, я новичок в Java.

  • 0
    недавно прочитал блог, в котором утверждалось, что если у вас есть больше, чем определенное количество ASyncTasks, то дела начинают идти странно. Может быть что-то, чтобы не упустить.
  • 0
    Джеймс Я читал то же самое, но я думаю, что я все еще под определенным «определенным числом» ASyncTasks или, по крайней мере, я еще не столкнулся с проблемой. Но спасибо за ваш совет.
Теги:
android-asynctask

1 ответ

1
Лучший ответ

Попробуйте static Integer которое увеличивается для каждой созданной AsyncTask и в onPostExecute() уменьшает ее. Когда он достигнет 0, все ваши задачи будут завершены.

Например: когда задача создана:

 synchronized(staticInt) {
    //create AsyncTask
    ++staticInt;
 }

И когда он заканчивается:

 protected void onPostExecute(Object result) {
     synchronized(staticInt) {
        --staticInt;
        if (staticInt == 0) {
           //show message
        }
     }
 }

Как и предложил @James, вы также можете использовать его для управления максимальным количеством выполняемых AsyncTask в определенное время:

 while (staticInt >= MAX_NUMBER_OF_THREADS) {
     //wait
 }

 synchronized(staticInt) {
    //create AsyncTask
    ++staticInt;
 }

Его можно улучшить с помощью подхода ожидания ожидания.

  • 0
    Хороший подход! Я постараюсь реализовать это. Спасибо за ваш ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню