Мы не можем повторить тот же экземпляр, если предыдущий экземпляр не завершил выполнение. Итак, как же здесь могут быть случаи с несколькими потоками?
Существует, например, основной поток пользовательского интерфейса и потоки исполнителей.
Почему у SerialExecutor есть ArrayDeque? Потому что в то время у нас может быть только одна задача. Если мы создадим новый экземпляр AsyncTask, тогда не получим новый экземпляр ArrayDeque, который снова будет иметь только одну задачу?
Неверно, что может быть только одна задача. Последовательный исполнитель может выполнять только одну задачу за раз, но вы можете ставить в очередь несколько задач в основном потоке, и они выполняются один за другим в потоке исполнителей.
Есть и другие исполнители, кроме последовательного исполнителя, также как и исполнитель пула потоков, о котором вы упоминаете позже.
То же самое происходит с ThreadPoolExecutor. Почему пулы потоков необходимы, когда для конкретного экземпляра AsyncTask у нас может быть только одна задача? Для этого достаточно одного потока.
Неверная посылка только одной задачи за раз. Исполнитель пула потоков полезен для одновременного запуска нескольких задач async в отдельных потоках.
Как происходит очередность таков и множество задач? Предположим, что я делаю экземпляр AsyncTask и выполняю его 5 раз. Тогда, если вы работаете, другие 4 не будут запускаться. Как я могу получить несколько задач в любом случае?
Вы можете выполнить один экземпляр AsyncTask
только один раз. Но вы можете отправить несколько разных экземпляров AsyncTask
для выполнения.Обратите внимание, что такая операция проводки (execute()
и т. Д.) Является асинхронной и возвращается до завершения задачи async, и вы можете запускать дополнительный код в потоке пользовательского интерфейса, включая отправку новых задач async для выполнения.
Для параллельного выполнения просто используйте executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ...)
.
Действительно ли это так, что поскольку SerialExecutor является статичным, то только один экземпляр его будет использоваться во всех экземплярах AsyncTask и, следовательно, требуется очередь?
Да, в вашем приложении есть только один последовательный исполнитель, и он делится между всеми асинхронными задачами.
Как происходит очередность таков и множество задач? Предположим, что я делаю экземпляр AsyncTask и выполняю его 5 раз. Тогда, если вы работаете, другие 4 не будут запускаться. Как я могу получить несколько задач в любом случае? – Diffy
Хорошо. Верно ли также, что поскольку SerialExecutor является статическим, так что только один экземпляр его будет использоваться во всех экземплярах AsyncTask и, следовательно, требуется очередь? – Diffy