运行并行AsyncTask

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

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

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

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

  • 样式EditText视图与shape drawable看起来类似于Android <3.0的新全息主题
  • 如何更改Android警报对话框的背景?
  • Android Notification重新启动应用但想要恢复
  • 更改按钮android:背景到不同的drawable
  • 跨多种活动的Android全面防故障音乐服务
  • 软键盘显示时如何保持背景图像大小
  • Android:在启动的Activity上设置Window Background
  • 如何使图像填充RelativeLayout背景而不拉伸
  • 您将需要使用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 } });