如何运行多个AsyncTask?

时间:2011-07-02 04:17:56

标签: android android-asynctask

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

我使用此

调用AsyncTasks
new PopulateSpinnerA().execute();

如果我只为一个Spinner调用一个AsyncTask

,它就可以工作

BUT!

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

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

我运行它并且我的app强制关闭

溶液?

更新<!/强>

我从下面的某个人那里得到灵感,他们用真假回答

我使用布尔值(使用true和false)来生成我的两个微调器

首先我制作一个布尔变量

Boolean SPN = false;

然后我创建一个函数来检查布尔值并将其放在onCreate()函数

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

我只是把这2行用来运行第二个微调器的AsyncTask

SPN = true;
cek();

BOOM!

完成了:D

1 个答案:

答案 0 :(得分:1)

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

  1. 只使用一个微调器。
  2. 启动第一个微调器时启动微调器。
  3. 使用PostExecute上设置的一个公共标志。
  4. 在步骤#3之前,在两个AsyncTask的postExecute上检查标志是否已设置,如果是,则取消微调器。
  5. 参考下面的伪代码。

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

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