运行并行AsyncTask

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

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

但是当我再次启动我的应用程序时,我的SplashActivity的AsyncTask不会执行它的背景(doInBackground函数),直到我的下载程序AsyncTask完成,并且我的应用程序被挂起。

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

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

所以创build一个ThreadPoolExecutor然后使用

AsyncTask的executeOnExecutor而不是只是执行方法

AsyncTask从Honeycomb版本发生了一些变化。 旧版本有一个10线程的线程池,所以你可以并行运行10个任务。 但是对于Honeycomb,默认情况下是一个串行执行程序,它可以逐个执行任务。 但是你可以传递一个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(); } 

另一个select是从支持v.4库使用AsyncTaskCompat 。

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