0

Как я могу убедиться, что все мои асинхронные операции, запущенные параллельно, завершили выполнение? Я запускаю несколько асинтетов параллельно с помощью executer. Нужно знать, что все закончили свою задачу.Параллельное состояние выполнения AsyncTask

+0

Как вы получаете уведомление о том, что любая из ваших asyncTask завершила свою работу? – Darpan

+0

Почему вы это делаете, не могли бы вы объяснить это. –

+0

У меня есть один асинхронный запрос, который проверяет наличие определенных условий. Исходя из условия, я должен загрузить несколько файлов параллельно. Эти параллельные загрузки начинаются с с первого async. Теперь у меня есть 3-4 асинхронные параллели с firat. Как обеспечить, чтобы все эти асинхи завершили свое исполнение? Я хочу выполнить оставшуюся работу в первом асинхронном режиме после того, как все выполнили. –

ответ

0

Самый простой способ - отслеживать каждый AsyncTask в List или Map. Когда они закончат, удалите их из трекера (в пределах onPostExecute()). Когда все были удалены, все сделано. Будьте осторожны с ними, а также с другими методами нарезки: они не являются компонентом Android (Activity, Service).

+0

Вы хотите сказать .. Запустите их и поместите в список и сделайте, пока (! ListIsEmpty) продолжайте ждать ..? –

+0

Нет, не стоит так ждать. Они асинхронны, и если вы ждете и блокируете свое приложение, оно будет убито. –

+0

Я так не думаю .. Я начинаю параллельные потоки из другого doynBackground asynctask() –

0

В качестве простого решения можно использовать переменную INT класса, как это:

private int TOTAL_ASYNC_TASKS_IN_PROGRESS = 0; 

затем увеличить эту Int в методе onPreExecute() и уменьшает эту Int в onPostExecute() методы.

Если у вас будет это значение int = 0, это означает, что все ваши AsyncTasks выполнены.

Edit::
Вы должны использовать свою собственную реализацию ThreadPool Исполнителя и выполнить AsyncTasks с ThreadPool исполнителем, а не по умолчанию. Поскольку, используя предоставленный по умолчанию ThreadPool Executor, вы можете потерять емкость, выполняя слишком много множественных асинхронных задач.

Вот хороший учебник для реализации пользовательского ThreadPool Исполнителя:
http://www.javacodegeeks.com/2013/03/my-custom-thread-pool-executor-in-java.html

Я надеюсь, что это помогает.

+0

Правильно ли это? Это первая мысль, которую я получил, чтобы разрешить ситуацию;) –

+0

Кажется, это способ сделать это, я не уверен, что это правильный путь. Но это наверняка решит вашу проблему :) –

+0

Спасибо .. Я попробую это.Существует ли наилучшая практика для одновременного запуска асинхронного или произвольного параллельного выполнения? –

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