并行执行多个AsyncTask

我正在使用Android SDK 4.0.3 API15,我想并行运行多个AsyncTasks。 我从Web服务器获取数据并实时animation(10 fps)。 但根据用户的操作,我也需要发送一些数据到Web服务器。 发生这种情况时,我的animation会暂停一段时间(发送数据进入队列并等待数据完成),因此我无法实时捕捉。

这个答案是相当的解释,但我不能使它的工作。 所以任何帮助将非常感激。

我想我需要使用这个function来实现:

AsyncTask.executeOnExecutor(Executor exec, Params... params) 

但是我不能传递一个执行者作为参数,我也不能实例化一个执行者。 这是我的AsyncTask类:

 public class GetPlayers extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { Thread.currentThread().setPriority(Thread.MAX_PRIORITY); rawData=""; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { HttpResponse execute = client.execute(httpGet); InputStream content = execute.getEntity().getContent(); BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); if((rawData = buffer.readLine()) == null){ rawData = "error"; } } catch (Exception e) { e.printStackTrace(); } } return rawData; } @Override protected void onPostExecute(String result) { manipulate(); } } 

我执行它是这样的:

 GetPlayers task = new GetPlayers(); requestString = "web adress is here..."; task.execute(new String[] { requestString }); 

这是我如何做到这一点:

 if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) { new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { new MyAsyncTask().execute(); } 

MyAsyncTask是常规的AsyncTask子类。 或者你可以把这一切都包装在助手类中:

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

然后只是做:

 TaskHelper.execute( new MyTask() ); 

要么

 TaskHelper.execute( new MyTask(), args ); 

要么

 TaskHelper.execute( new MyTask(constructorParams), args ); 

这个问题出现在我身上,在AndroidStudio中将我的应用程序更新为使用Android 2.3的Intelliy sdk 25只需稍作更改(executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,string1,…);)完美地工作。 我有一个AsyncTask运行在一个服务下载和创buildAsyncTasks上传没有服务。