在使用AsynTask的时候,可能由于不知道它的一些特性而产生困惑,如下这种情况:
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
//TODO
return null;
}
}.execute();
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
//TODO
return null;
}
}.execute();
这两个Task其实就是顺序执行的,而不是并发执行。
但如果我们想要并发执行,我们需要使用AsyncTask.executeOnExecutor(),需要传入的参数是线程池,这个池我们可以自己创建,也可以使用系统提供的例如AsyncTask.THREAD_POOL_EXECUTOR,而AsyncTask.SERIAL_EXECUTOR即为AsynTask.execute()执行时默认使用的线程池。