По умолчанию AsyncTask
s запускаются в одном фоновом потоке. (!!) Таким образом, ваша задача отправки, вероятно, будет поставлена в очередь для запуска после того, как будут выполнены все выборки.
Вы можете выбрать запуск AsyncTasks в пуле потоков, используя AsyncTask.executeOnExecutor
, передавая THREAD_POOL_EXECUTOR
в качестве аргумента. Итак, теперь ваша задача отправки будет поставлена в очередь после завершения всех отправок в N доступных потоках в пуле потоков.
При этом длительные операции ввода-вывода, вероятно, следует запускать на выделенных пулах потоков, а не на THREAD_POOL_EXECUTOR, поскольку пулы потоков по умолчанию предназначены для использования краткосрочными задачами. Если вы этого не сделаете, вы в конечном итоге лишитесь использования стандартных пулов потоков, связанных с пользовательским интерфейсом. Вам действительно нужен выделенный пул из двух, трех или четырех потоков для приема и, возможно, отдельный один, два или три потока для отправки.
Как бы то ни было, AsyncTask
датируется темными веками Android, неоднократно подвергался злоупотреблениям со стороны команды разработчиков Android, и теперь официально объявлен устаревшим. (Ура!) Аргументы шаблона и синтаксис исполнителя AsyncTask с самого начала - просто плохая идея; и при его использовании слишком легко ошибиться. Теперь Google рекомендует использовать вместо него java.util.concurrent
.
ps. Честно говоря, AsyncTask был разработан в эпоху, когда мобильные телефоны были патетическими c вещами с дисплеями 320x200, одним процессором, где наличие двух целых потоков было большим делом. java.util.concurrent
намного лучше.