AsyncTask execute () или executeOnExecutor ()?

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

Solutions Collecting From Web of "AsyncTask execute () или executeOnExecutor ()?"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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