运行并行AsyncTask

我的应用程序中有一个SplashActivity,它在我启动应用程序时使用AsyncTask做一些事情。

我还创建了另一个从服务器下载数据的AsyncTask。 现在关闭我的应用程序后,AsyncTask仍在下载数据。

但是当我再次启动我的应用程序时,我的SplashActivity的AsyncTask不执行其后台(doInBackground函数),直到我的下载器AsyncTask完成,我的应用程序被挂起。

所以我的问题是我们不能运行两个AsyncTask并行? 两个AsyncTask都是不同的,并做自己的东西。 有没有办法做到这一点。

Related of "运行并行AsyncTask"

您将需要使用thread pool Executor来执行AsyncTask 。 默认实现使用在单个线程上运行的串行执行程序

所以创建一个ThreadPoolExecutor然后使用

AsyncTask的executeOnExecutor而不仅仅是execute方法

Honeycomb版本的AsyncTask发生了变化。 旧版本有一个10个线程的线程池,因此您可以并行运行10个任务。 但对于Honeycomb及以上版本,default是一个串行执行器,它逐个执行任务。 但是你可以传递一个ThreadPoolExecutor来执行:

  if (Build.VERSION.SDK_INT >= 11) { //--post GB use serial executor by default -- task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { //--GB uses ThreadPoolExecutor by default-- task.execute(); } 

另一个选择是使用支持v.4库中的AsyncTaskCompat 。

 AsyncTaskCompat.executeParallel(new AsyncTask() { @Override protected Object doInBackground(Void... params) { // do your parallel task here return null; } @Override protected void onPostExecute(Object result) { // and fetch result } });