AsyncTask execute()或executeOnExecutor()?

Ras*_*d.Z 49 android android-asynctask

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

  • execute()默认情况下如何执行任务?(串行还是并联?)

  • 什么应该用于新的SDK> 16?

  • 将并行执行(THREAD_POOL_EXECUTOR)用于任务而不是串行是一个好习惯,即使它对应用程序无关紧要,还是取决于AsyncTask将要执行的s 的数量?

Rah*_*rma 82

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

.executeOnExecutor() -如果要并行执行两个AsyncTasks,可以使用此方法执行AsyncTask.意味着asyncTasks将同时执行.

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

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

编辑: 如果您想使用executeOnExecutor(),您可以使用此代码:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
     task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
 else
     task.execute();
Run Code Online (Sandbox Code Playgroud)

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


laa*_*lto 49

.execute默认执行任务(串行或并行).

在API级别11之前:并行.

API级别11及以上:序列号.

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

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

将并行执行(THREAD_POOL_EXECUTOR)用于任务而不是串行是一个好习惯,即使它对应用程序无关紧要,还是取决于将要执行的异步任务的数量?

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

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

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

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