我在名为 StartServiceActivity 的 Activity 中启动了两个服务。
在 StartServiceActivity 的 On create 方法中,我启动了两个服务,服务 1 和服务 2。
服务创建成功。
在服务 1 的 onstart 方法上,我启动了一个 asynTask1。
asynTask1执行成功,进入doInBackGround()
在 asynctask1(service1) 的 doInbackground() 中,我创建了一个
while(true){
在 service2 的启动方法上,我启动了一个 asynTask2。
然后我尝试启动 asynTask2 但它启动失败。 asynTask2 的 doInBackground() 没有被执行
当我在 asynTask1 中评论
while(true){
时,asynTask1 和 asynTask2 都会启动。我想用
while(true)
执行 async1 和 asyn2。
最佳答案
原因是因为 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
关于android - 异步任务中的 While 循环会阻止另一个异步任务的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22579062/