2014-10-29 59 views
-1

我想創建大量的asynctask,並依次運行。 這可能嗎?我無法找到任何解決方案。Android Asynctask按順序依次運行

onPostExecute然後再次調用一個新的AsnycTask對我來說不是一個好的解決方案。

所以我想:

async1.execute 
async2.execute 
async3.execute 

async1.over->async2.start 
async2.over->async3.start 
+0

[**特別爲你**](http://nobalg.tumblr.com/post/98543748225/android-asynctasks-one-after-the -other) – nobalG 2014-10-29 09:05:31

+0

'onPostExecute然後再次調用一個新的AsnycTask對我來說不是一個好的解決方案。「爲什麼? – 2014-10-29 09:06:46

回答

1

不喜歡

async1.execute 

then write async2.execute into onPostexecute of async1 

and then write async3.execute into onPostexecute of async2 

沒有任何其他有效的方式。您可以考慮實現線程(等待/通知),但這不適用於asyntask。

+0

「onPostExecute然後再次調用新的AsnycTask對我來說不是一個好的解決方案。」 – user2717954 2014-10-29 09:05:17

+0

@ user2717954爲什麼不呢? – nobalG 2014-10-29 09:05:57

+0

地獄,如果我知道OP寫了什麼 – user2717954 2014-10-29 09:07:18

0

讓第一個AsyncTask爲MyAsyncTask1,第二個爲MyAsyncTask2。現在你想要的是。在活動從

執行MyAsyncTask1 採取的應對收到 現在就全成響應,執行MyAsyncTask2 有關調用它們的順序像什麼:

MyAsyncTask1.execute(); 

MyAsyncTask2.execute(); 

與上面的代碼問題就可以通過在AsyncTask對象上執行調用將創建一個新的線程在不同的內存空間中運行,並立即在其自己的內存空間中啓動下一個AyncTask這一事實可以理解。但這不是我們想要的。我們希望第一個線程必須完成其工作那麼只有第二個纔會開始工作。如何實現這個目標?

答案在於onPostExecute()。這是這將幫助你擺脫這個situation.While調用執行上MyAsyncTask1然後第一AsyncTaskdoInBackground()後的方法,onPostExecute()將被稱爲.Place在檢查即onPostExecute()如果響應爲空,如果收到的響應不等於空,並且是有效的響應,則調用MyAsyncTask2(如果指定了各自的參數)執行。

SEE THIS

您可以在鏈做到這一點.....

0
 // Async Task Class here async1 
     class YourAsynClass extends AsyncTask<String, String, String> { 


      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       // Shows Progress Bar Dialog and then call doInBackground method 
       showDialog(progress_bar_type); 
      } 


      @Override 
      protected String doInBackground(String... PassYourdata) { 

      // do your stuff here 
      } 


      @Override 
      protected void onPostExecute(String IFYouwantPassData) { 
       // Dismiss the dialog 
       dismissDialog(progress_bar_type); 
       // here async2 
       new SecondAsyncTask.execute(Passeddata); 
      } 
     } 

,並在第三個做同樣的

1

我猜你應該使用執行人絲毫BlockQueue代替AsyncTask,並使用Handler發送處理結果。 BockQueue是一個FIFO數據結構,適合你的口味...