Выполнение нескольких потоков asynctask в цикле

Рейтинг: 3Ответов: 2Опубликовано: 27.04.2015

Разрабатываю приложение в котором необходимо выполнить несколько потоков в цикле. Имеется 4 Spinner-а.Данные для каждого спиннера берутся из базы данных на сервере в в каждом отдельном поток AsyncTasc. Мне нужно сделать чтобы в первом спиннере при выборе пункта "Все" показывались результаты всех спиннеров. Для этого делаю несколько вложенных в друг друга циклов. Но при вызове в каждом цикле new example().execute() данные не успевают передаваться. При Debug-е данные показываются но при выполнении программы в обычном режиме нет. Как сделать чтобы выполнение кода выполнялось только после окончания выполнения AsyncTasc?

Ответы

▲ 4Принят

класс AsyncTask так же имеет метод get() , который дожидается выполнения задачи , а затем возвращает ее результат , если преопределение onPostExecute() вам не подходит (пример использования)

Так же это не совсем решение вашей проблемы , но если вы выполняете более одного потока параллельно , запускать их на выполнение следует через:

asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

Данное решение ускорит обработку фоновых задач , так как указывает запускать поток параллельно с уже запущенными . Дело в том , что с API11 запуск потока через execute() ставит все следующие после первого потоки в очередь и они дожидаются окончания выполнения предыдущих , то есть задачи выполняются последовательно , а не параллельно.

▲ 2

onPostExecute(). есть такой метод в асинктаске. Он выполняется на UI потоке. В него и положите код, который надо выполнить после операций с AsyncTask