android – 同时使用多个AsyncTasks的HttpClient请求

前端之家收集整理的这篇文章主要介绍了android – 同时使用多个AsyncTasks的HttpClient请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个需要同时下载多个文件的应用程序.我正在为每个文件创建一个具有自己的HttpClient的AsyncTask,但是下一个文件只有在上一个文件完成后才开始下载.

可能是服务器端的问题吗?

解决方法

这是因为Honeycomb中的AsyncTask管理改变了.以前,如果您启动了3个AsyncTasks,则它们同时运行.由于HC,如果您的targetSdk设置为12或更高版本,那么它们将逐个排队并执行(参见 this discussion).为了正常工作,您可以通过以下方式启动AsyncTasks:
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,params);

代替:

task.execute(params);

如果您还定位较旧的Android,则需要条件代码

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

或将其包装在一个单独的帮助类中:

public class Utils {

    public static <P,T extends AsyncTask<P,?,?>> void executeAsyncTask(T task) {
        executeAsyncTask(task,(P[]) null);
    }

    @SuppressLint("NewApi")
    public static <P,?>> void executeAsyncTask(T task,P... params) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,params);
        } else {
            task.execute(params);
        }
    }
 }

并且使用将是:

Utils.executeAsyncTask( new MyAsyncTask() );

猜你在找的Android相关文章