2013-04-29 50 views
0

我在我的啓動屏幕Activity中有三個AsyncTasks,用於下載緩存的應用程序數據。我不想真正開始下一個活動,直到所有task完成。如何完成所有AsynTask完成時的活動

有沒有這樣做的有效方法?

這裏是我打電話給我的任務在onCreate

  TrendingTask task = new TrendingTask(SplashActivity.this); 
      task.execute(); 

      TrendingWatchingTask task2 = new TrendingWatchingTask(
        SplashActivity.this); 
      task2.execute(); 

      new MasterTask().execute(); 

他們都稱爲,一前一後。我實際上並沒有開始下一個活動,直到達到MasterTaskonPostExecute()。但我相信這是一場賭博,因爲另外兩場可能無法完成。

注:MasterTask是內部class而其他兩個是他們自己的類。

+0

你可以確定是否所有的asynctask都是通過查看它們串行還是並行運行來完成的。根據您的API級別,這已經改變了幾次。看看這篇文章(從中間開始)以獲取更多信息:http://bon-app-etit.blogspot.be/2013/04/the-dark-side-of-asynctask.html – dumazy 2013-04-30 08:23:02

回答

3

您可以保留一個全局整數計數器,並在AsyncTask每次啓動時(在onPreExecute()中)遞增並在onPostExecute()中遞減。當你啓動你的活動時,你可以檢查這個計數器是否等於零。如果它不是 - 那麼你知道你已經有AsyncTasks在運行。

+1

雖然這聽起來可能相當合理乍一看,你如何在開始你的活動之前繼續檢查?你是否繼續檢查循環?假設你在非UI線程中循環,如果你在'onPreExecute'中遞增並在'onPostExecute'中遞減,你的支票可能會進入兩個'AsyncTask'之間,此時計數器將爲0,但實際上你的任務並不全是完整的。 – kabuko 2013-04-30 00:10:18