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)用于任务而不是串行是一个好习惯,即使它对应用程序无关紧要,还是取决于将要执行的异步任务的数量?

异步任务应仅用于相对较短的背景操作。 引用AsyncTask文档:

理想情况下,AsyncTasks应该用于短操作(最多几秒钟)。如果需要保持线程长时间运行,强烈建议您使用java.util.concurrent包提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。

异步任务正在运行时,执行程序线程无法执行其他任务。 在只有一个执行程序线程的串行执行程序上,当您的任务运行时间过长时,更容易检测到问题。 在并行执行器上检测此类问题需要同时执行更长时间的任务。

因此,如果您确实需要切换到并行执行程序,那么最好重新访问您的设计。

.execute() –此函数为单个后台线程调度队列上的任务。 意味着如果您正在调用两个asyncTasks并使用.execute()方法来调用它们,它们将在队列中执行(第一个然后是第二个)。

.executeOnExecutor() –如果要同时并行执行asyncTasks,可以使用此方法执行asyncTask。 意味着asyncTasks将同时执行。

简单来说:.execute()方法创建一个执行asyncTasks的线程,而.executeOnExecuter()方法为每个ayncTask创建一个saprate线程。

.execute默认按顺序执行任务。

编辑:如果你想使用executeOnExecutor(),你可以使用这段代码:

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

在HONEYCOMB execute()方法之前并行运行AsynkTask。