2015-04-29 3 views
22

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

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

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

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

+0

Параллельное выполнение было отключено по умолчанию в API AsyncTask после цели сэндвич мороженого. Поэтому, если вам все еще требуется параллельное выполнение в ваших AsyncTasks, вам нужно использовать 'executeOnExecutor'. –

ответ

26

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

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

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

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

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

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

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

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

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

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

36

.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(); 

метод

Перед СОТОВЫХ выполнить() запустить AsynkTask параллельно.

Смежные вопросы