解决方法
这是因为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() );