android - 异步任务中的 While 循环会阻止另一个异步任务的执行

标签 android multithreading android-asynctask

我在名为 StartServiceActivity 的 Activity 中启动了两个服务。

在 StartServiceActivity 的 On create 方法中,我启动了两个服务,服务 1 和服务 2。

服务创建成功。

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

    asynTask1执行成功,进入doInBackGround()

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

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

    然后我尝试启动 asynTask2 但它启动失败。 asynTask2 的 doInBackground() 没有被执行

  3. 当我在 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/

相关文章:

android - 我不明白调用或类需要 API 级别 3

android - 崩溃的 Android 应用程序的反馈消息出现在哪里?

Android 媒体播放器和搜索栏同步问题

android - AsyncTask 和进度条

Android:为 AsyncTask 设置超时

android - 在 Android 中实现文件下载的进度条

android - 更新 parse.com 中的现有记录不工作它做重复

java - 主题 网络环境中的本地问题

java - Java 多线程中不能使用 join()

c# - Form.Show()导致Visual Studio 2010中的InvalidOperationException,该异常在2008年不存在