一直以来都是以下面的方式执行AsyncTask任务:
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// 处理耗时操作
return null;
}
}.execute();
但是,最近在使用过程中发现在4.0以上的手机上使用上面的方法执行AsyncTask任务,只会有一个线程在执行,经过多方测试才发现在2.X的系统上AsyncTask是多线程的,到了4.X上后就变成AsyncTask的线程池里只有一个线程在跑了。
而在看一些开源的项目代码的时候,发现别人在3.0以上的手机上执行AsyncTask都不会使用上面的方式执行了,所以,应该是3.0以上的AsyncTask默认是单线程执行了。
所以要适配不同版本的手机,应该使用下面的工具类执行AsyncTask任务:
public class CommonUtils {
public static <Params, Progress, Result> void executeAsyncTask(
AsyncTask<Params, Progress, Result> task, Params... params) {
if (Build.VERSION.SDK_INT >= 11) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
}
示例:
CommonUtils.executeAsyncTask(new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// 处理耗时操作
return null;
}
});