运行并行AsyncTask

san*_*eev 24 android background android-asynctask

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

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

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

所以我的问题是我们不能运行两个AsyncTask并行?AsyncTask都是不同的,并且正在做自己的事情.有没有办法做到这一点.

S.D*_*.D. 39

来自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();
   }
Run Code Online (Sandbox Code Playgroud)

  • 你不需要指定最后一个参数`new Void [] {}`; 省略它就足够了. (3认同)

nan*_*esh 35

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

所以创建一个ThreadPoolExecutor然后使用

AsyncTask的executeOnExecutor而不仅仅是execute方法

  • 使用默认执行程序的@ Gee.E更好,因为只有一个线程被实例化,所以如果你没有同时运行太多任务,默认执行程序提供了更好的性能,但是如果有一个asynctask需要很多时间,你可能需要一个ThreadPoolExecutor (2认同)