2012-06-07 62 views
1

所以我正在做的是,我有一個循環,我在我的循環內調用一個AsyncTask,所以可能有一堆。根據我的理解,在完成循環之後,我不能只顯示一條消息,表明一切都已完成,因爲消息將在AsyncTasks完成之前出現,因爲那是異步線程的一個點。調用一堆AsyncTask,有沒有辦法知道它們何時完成顯示一條消息?

如果我只有一個AsyncTask它將是一個nobrainer,我會把我的代碼顯示一條消息到onPostExecute(),但現在我有很多。

那麼有什麼方法可以知道什麼時候所有的AsyckTast線程都完成了,所以我可以顯示我的消息?

感謝您回答,您可能猜到,我對Java有點新鮮。

+0

最近讀了一篇博客,聲稱如果你有更多的ASyncTasks事情開始奇怪的話。可能是要注意的事情。 – James

+0

詹姆斯我讀了同樣的,但我認爲我仍然在這個特定的「一定數量」ASyncTasks或至少我還沒有遇到問題。但謝謝你的建議。 –

回答

1

嘗試用static Integer遞增,每增加一個AsyncTask創建並在onPostExecute()遞減。當它達到0時,你的所有任務都將完成。

如: 當創建任務:

synchronized(staticInt) { 
    //create AsyncTask 
    ++staticInt; 
} 

而當它完成:

protected void onPostExecute(Object result) { 
    synchronized(staticInt) { 
     --staticInt; 
     if (staticInt == 0) { 
      //show message 
     } 
    } 
} 

正如@詹姆斯的建議,你也可以用它來控制執行的AsyncTask的最大數量一定時間:

while (staticInt >= MAX_NUMBER_OF_THREADS) { 
    //wait 
} 

synchronized(staticInt) { 
    //create AsyncTask 
    ++staticInt; 
} 

它可以改善與等待 - noti fy方法。

+0

好方法!我會盡力實施它。感謝您的回覆。 –

相關問題