【问题标题】:While loop in Async task block the execution of another Async task异步任务中的while循环阻止另一个异步任务的执行
【发布时间】:2014-03-22 14:44:42
【问题描述】:

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

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

服务创建成功。

  1. service 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 和 async2。

【问题讨论】:

    标签: android multithreading android-asynctask


    【解决方案1】:

    原因是因为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

    【讨论】:

      猜你喜欢
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      相关资源
      最近更新 更多