Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

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

#java #потоки_данных #android #android_asynctask


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


Ответы

Ответ 1



класс AsyncTask так же имеет метод get() , который дожидается выполнения задачи , а затем возвращает ее результат , если преопределение onPostExecute() вам не подходит (пример использования) Так же это не совсем решение вашей проблемы , но если вы выполняете более одного потока параллельно , запускать их на выполнение следует через: asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); Данное решение ускорит обработку фоновых задач , так как указывает запускать поток параллельно с уже запущенными . Дело в том , что с API11 запуск потока через execute() ставит все следующие после первого потоки в очередь и они дожидаются окончания выполнения предыдущих , то есть задачи выполняются последовательно , а не параллельно.

Ответ 2



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

Ответ 3



Воспользуйтесь переопределенным методом onPostExecute, который выполнится после выполнения задачи в потоке doInBackground

Комментариев нет:

Отправить комментарий