Подтвердить что ты не робот

AsyncTask execute() или executeOnExecutor()?

В чем разница между использованием execute() и executeOnExecuter()?

  • Как execute() выполнять задачи по умолчанию? (последовательно или параллельно?)

  • Что нужно использовать для новых SDK > 16?

  • Хорошо ли использовать параллельное выполнение (THREAD_POOL_EXECUTOR) для задач, а не для серийных, даже если это не имеет значения для приложения или это зависит от количества AsyncTask, которое будет выполнено

4b9b3361

Ответ 1

Как выполнять .execute выполнять задачи по умолчанию (последовательно или параллельно).

До уровня API 11: параллельный.

Уровень API 11 и выше: серийный.

который должен использоваться для новых SDK > 16 (executeOnExecuter?)

В зависимости от ваших требований. Используйте execute(), если вы довольны исполнителем по умолчанию. Используйте явный исполнитель, если вы этого не сделали.

Хорошо ли использовать параллельное выполнение (THREAD_POOL_EXECUTOR) для задач, а не для серийных, даже если это не имеет значения для приложения или зависит от количества выполняемых асинхронных задач?

Асинхронные задачи должны использоваться только для относительных коротких операций заднего плана. Цитирование AsyncTask документации:

AsyncTasks в идеале следует использовать для коротких операций (максимум за несколько секунд). Если вам нужно поддерживать потоки в течение длительных периодов времени, настоятельно рекомендуется использовать различные API, предоставляемые java.util.concurrent пакет, такой как Исполнитель, ThreadPoolExecutor и FutureTask.

Во время выполнения задачи async поток исполнителей не может выполнять другие задачи. На последовательном исполнителе с одним потоком исполнителей легче обнаруживать проблемы, когда ваши задачи выполняются слишком долго. На параллельном исполнителе обнаружение таких проблем требует более длительных задач.

Поэтому, если вам действительно нужно переключиться на параллельный исполнитель, вам, вероятно, лучше пересмотреть свой дизайн.

Ответ 2

.execute() -, эта функция назначает задачу в очереди для одного фонового потока. Если вы вызываете две асинхронные задачи и используете метод .execute() для их вызова, они будут выполняться в очереди (сначала, затем в секундах).

.executeOnExecutor() - Если вы хотите параллельное выполнение обеих асинхронных задач, вы можете использовать этот метод для выполнения asyncTask.

Простыми словами:.execute() метод создает один поток для выполнения asyncTasks, а метод .executeOnExecuter() создает saprate thread для каждой ayncTask.

.execute выполняет задачи по умолчанию в последовательном порядке.

Редакция: Если вы хотите использовать executeOnExecutor(), вы можете использовать этот код:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
     task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
 else
     task.execute();

Перед тем, как метод execute() HONEYCOMB запускает AsynkTask параллельно.