关于Android3.0版本之后的AsyncTask类

来源:互联网 发布:南华大学船山学院 知乎 编辑:程序博客网 时间:2024/05/16 03:35

一直以来都是以下面的方式执行AsyncTask任务:

new AsyncTask<Void, Void, Void>() {@Overrideprotected 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>() {@Overrideprotected Void doInBackground(Void... params) {// 处理耗时操作return null;}});


原创粉丝点击