Два разных параллельных потока в Activity разные по времени

188
24 июля 2021, 00:20

уважаемые! В AsyncTask получаю JSON данные по REST с сервера, обрабатываю с помощью Jackson и отправляю это в ListView.

Проблема в том, что мне нужно получать данные по двум разным url-запросам(с разными параметрами AsynсTask), причем ответ по первому запросу приходит через 1 сек, а по второму запросу может доходить до - 20 сек (специфика поиска данных на бэкенде)

  1. Как можно запустить параллельно два разных таких потока и выводить результат по мере получения данных в ListView? И должны ли быть разные ListView для каждого потока?

  2. Так как время на поиск данных происходит на бэкенде, каким образом можно отловить это время и завернуть в ProgressBar? Банальные способы установки прогресса в методы onPreExecute() и onPostExecute() ничего не дают - прогресс появляется на доли секунды уже непосредственно перед отображением результата.

Answer 1

1) Ну, раз уже работает с AsycTask, то можно сделать два AsycTask =) Вроде никаких подводных камней с несложной, как я понимаю, программой вы не встретите. Список может быть один, но тогда вам нужно в нем реализовать логику реакции на завершения каждого из тасков, причем так, чтоб они могли завершится в любом порядке/могли не все завершится. Как именно это делать - зависит от самих данных и того как вы хотите их отображать. Хотите более конкретного совета - ответьте на эти вопросы

2) Зависит, конечно, от бэкэнда и способа сбора ответа, но почти наверняка в на самом бэкэнде не сможете просчитать процент выполнения, не то что передать его клиенту. Если это один большущий запрос к бд - точно не выйдет, если огромное количество маленьких - можете попробовать, например, слать запросы пачками, а не одним, и отображать в процентах сколько запросов уже выполнено. Но это костылирование. ЛУчше просто повесьте круглый прогрессБар, юзеры к ним вполне привыкли

READ ALSO
Вычислить число размещений из n по m

Вычислить число размещений из n по m

Нужна помощь, кто чем может,нужно реализовать функцию, которая будет вычислять количество размещений из n по m , спасибо

152
Нужно очистить текстовый файл и записать после очистки новые данные

Нужно очистить текстовый файл и записать после очистки новые данные

Естьtxt файл, он должен с помощью кода очищаться, и после очищения в него нужно записать новую информацию

203
Ошибка при запуске JAVA приложения

Ошибка при запуске JAVA приложения

Пытаюсь запустить minecraft сервер на Debian 8, но при запуске возникает ошибка: pastebin

197