AsyncTask execute() or executeOnExecutor()?

Rashad.Z picture Rashad.Z · Apr 29, 2015 · Viewed 40.5k times · Source

What's the difference between using execute() and executeOnExecuter()?

  • How does execute() execute tasks by default? (in serial or in parallel?)

  • What should be used for new SDKs >16?

  • Is it a good practice to use parallel execution (THREAD_POOL_EXECUTOR) for tasks rather than serial even if it doesn't matter for the application or does that depends on the number of AsyncTasks that will be executed?

Answer

Rahul Sharma picture Rahul Sharma · Apr 29, 2015

.execute() - this function schedules the task on a queue for a single background thread. Means that if you are calling two AsyncTasks and using .execute() method to call them, they will execute in a queue(first then second).

.executeOnExecutor() - If you want parallel execution of both AsyncTasks, you can use this method for execution of AsyncTask. Means both asyncTasks will execute simultaneously.

In simple words: .execute() method creates a single thread for execution of asyncTasks, and .executeOnExecuter() method creates separate thread for each ayncTask.

.execute executes tasks by default in serial order.

EDITED: If you want to use executeOnExecutor() you can use this code:

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

Before HONEYCOMB execute() method run AsynkTask in parallel.