繁体   English   中英

如何运行多个 AsyncTask?

[英]How to run multiple AsyncTask?

我有 2 个微调器,每个微调器的数据使用 AsyncTask 从数据库加载

我用这个调用 AsyncTasks

new PopulateSpinnerA().execute();

如果我只为一个 Spinner 调用一个 AsyncTask,它就可以工作

但!

我有 2 个 Spinner,所以我像这样为每个 Spinner 调用 AsyncTask

new PopulateSpinnerA().execute(); // for Spinner A
new PopulateSpinnerB().execute(); // for Spinner B

我运行它并且我的应用程序强制关闭

解决方案?

更新!

我从下面回答真假的人那里得到灵感

我使用 boolean(玩弄真假)来生成我的两个微调器

首先我做一个 boolean 变量

Boolean SPN = false;

然后我制作一个 function 来检查 boolean 并将其放在 onCreate() function

private void cek(){
        if(!SPN){
            new populateSpinnerA().execute();
        }
        if(SPN){
            new populateSpinnerB().execute();
        }
    }

在 populateSpinnerA() 我只是把这 2 行来运行第二个微调器的 AsyncTask

SPN = true;
cek();

繁荣!

完成了:D

您不能同时拥有两个微调器。 在这种情况下需要使用任何技巧,

  1. 仅使用一个微调器。
  2. 在启动第一个微调器时启动微调器。
  3. 使用 PostExecute 上设置的一个通用标志。
  4. 在第 3 步之前,在两个 AsyncTask 的 postExecute 上检查标志是否已设置,如果是,则取消微调器。

参考下面的伪代码。

postExecute(){
      If(taskCompletedFlag == true){
            //Code to cancel the spinner.
            taskCompletedFlag = false;
      }else{
            taskCompledtedFlag = true;
      }
}

PS - 如果您不知道哪个 AsyncTask 将首先启动,您可以在那里使用相同的机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM