Async任务中的循环阻止执行另一个异步任务

时间:2014-03-22 14:44:43

标签: android multithreading android-asynctask

我在名为StartServiceActivity的活动中启动了两项服务。

在StartServiceActivity的On create方法中,我启动了两项服务,即服务1和服务2.

服务创建成功。

  1. 服务1 的onstart方法上,我启动了一个asynTask1。

    asynTask1已成功执行并进入doInBackGround()

    在asynctask1(service1)的doInbackground()中,我创建了一个while(true){

  2. 在service2的start方法中,我启动了一个asynTask2。

    然后我尝试启动 asynTask2 ,但无法启动。 asynTask2的doInBackground()未被执行

  3. 当我在asynTask1中评论while(true){时,asynTask1和asynTask2都启动了。

    我想用while(true)执行async1和asyn2。

1 个答案:

答案 0 :(得分:2)

原因是因为AsyncTasks按顺序运行,即一个接一个地运行。在这里查看Order of execution

所以发生的事情是:task1中有一个首先运行的while循环。 while循环没有完成,因此task2无法执行。

<强>解决方案:

您需要手动设置AsyncTask的执行程序,以便不使用默认(串行)执行程序。做类似的事情:

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();
   }

看看这个link