AsyncTask execute()或executeOnExecutor()?

使用execute()executeOnExecuter()什么区别?

Related of "AsyncTask execute()或executeOnExecutor()?"

如何执行默认执行任务(串行或并行)。

在API级别11之前:并行。

API级别11及以上:串行。

这应该用于新SDK> 16(executeOnExecuter?)

取决于你的要求。 如果你对默认执行器感到满意,使用execute() 。 如果你不是,请使用显式执行器。

对于任务使用并行执行(THREAD_POOL_EXECUTOR)而不是串行,即使对于应用程序无关紧要,还是取决于将要执行的asynchronous任务的数量,是不是很好的做法?

asynchronous任务只能用于相对较短的后台操作。 引用AsyncTask文档:

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

当asynchronous任务正在运行时,执行程序线程不能执行其他任务。 在只有一个执行程序线程的串行执行程序中,当任务运行时间过长时,更容易检测到问题。 在并行执行者检测到这些问题需要更多的同时长时间运行的任务。

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

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

.executeOnExecutor() –如果要并行执行两个asyncTasks,则可以使用此方法执行asyncTask。

简单地说:.execute()方法创build一个执行asyncTasks的线程,.executeOnExecuter()方法为每个ayncTask创buildsaprate线程。

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

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

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

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