Так что я делаю, у меня есть цикл, и я называю AsyncTask внутри моего цикла, так что может быть куча их. По моему мнению, после завершения цикла я не могу просто отобразить сообщение о том, что все будет завершено, потому что сообщение появится перед выполнением AsyncTasks, так как это похоже на точку асинхронной потоковой передачи.
Если бы у меня был только один AsyncTask, это был бы знатока, я бы поставил свой код на сообщение в onPostExecute(), но теперь у меня их много.
Итак, есть ли способ узнать, когда все потоки AsyckTast закончены, чтобы я мог показать свое сообщение?
Спасибо за ответ в ответ, как вы могли догадаться, я новичок в Java.
Попробуйте 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;
}
Его можно улучшить с помощью подхода ожидания ожидания.