簡體   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