Как использовать ExecutorService с Android AsyncTask?

Мне нужно выполнить несколько AsyncTask, а затем собрать все их результаты, консолидировать и затем вернуть конечный результат моему пользователю.

Я рассматриваю способ управления несколькими AsyncTask в Android. Я думаю использовать ExecutorService из пакета Java Concurrency, но я застрял, потому что ExecutorService принимает только Runnables или Callables ONLY. Чтобы установить мое требование, я могу использовать

ExecutorService.invokeAll((Collection<? extends Callable<T>> tasks)

Метод invokeAll() возвращает список List<Future><V>> только тогда, когда все отправленные задачи будут завершены, и я могу получить результаты для каждой задачи из соответствующего Future.

Все хорошо с ExecutorService ожидать, что он не принимает AsyncTask.

Есть ли другой способ использования AsyncTask и ExecutorService, или если вы можете рекомендовать другой подход.

Ответ 1

Создайте AsyncTask и начните свои потоки с doInBackground(). Когда они будут сделаны, собирайте, консолидируйте и т.д. Данные и верните их. Затем вы можете использовать его в onPostExecute для обновления пользовательского интерфейса. Запуск слишком большого количества потоков будет потреблять память, поэтому вам стоит подумать, нужно ли им работать параллельно.