例如,我有兩個方法method1()和method2(),現在每個方法都創建新的AsyncTask並開始執行一些http內部查詢。每個任務都返回對象的List(list1和list2),我需要等待所有對象並將這些列表放入一箇中以返回。什麼是最好的方式來做到這一點?將AsyncTasks的結果放在一起
而且我並不需要保持順序,它可以是list2之後的list1。等待所有結果以及我應該積累它們的最佳方式是什麼?如果我想保持秩序呢?
例如,我有兩個方法method1()和method2(),現在每個方法都創建新的AsyncTask並開始執行一些http內部查詢。每個任務都返回對象的List(list1和list2),我需要等待所有對象並將這些列表放入一箇中以返回。什麼是最好的方式來做到這一點?將AsyncTasks的結果放在一起
而且我並不需要保持順序,它可以是list2之後的list1。等待所有結果以及我應該積累它們的最佳方式是什麼?如果我想保持秩序呢?
沒有看到你已經做了什麼,它很難給予很多幫助。但我會創建一個成員ArrayList
或LinkedHashMap
並用第一種方法調用第一個AsyncTask
並將這些結果放入列表中。然後從第一個AynscTask
的中調用第二個方法,並將這些結果添加到列表中。如果您需要更多的幫助,那麼請張貼一些代碼,你已經開始
據AsyncTask說明你有兩個有趣的方法:
doInBackground
onPostExecute
第一一個用於在後臺線程中工作並返回結果,第二個在UI線程中調用結果作爲參數。您可以將下載/計算的數據添加到每個AsyncTask的doInBackground
列表中,並且這應該起作用。
如果你想知道,如果這兩個AsyncTasks已經完成,那麼你必須有兩個標誌,都設置在UI線程檢查:在onPreExecute
設置,檢查在onPostExecute
我建議你使用「線程」 S代替的AsyncTask。 例如:
new Thread(new Runnable(){
list1 = getList1();
new Thread(new Runnable(){
list2 = getList2();
//you have now list1 and list2, call your method here to do your stuff
}).start();
}).start();
我有很多代碼:)但我想獲得不是基於我的代碼的智能解決方案。有一個問題,方法啓動兩個同時運行的任務,沒有人知道哪個會更快地結束它的工作。 –
我不懷疑你有很多代碼,但我的意思只是相關的代碼。無論如何,你可以運行每個列表並放入單獨的列表中,然後當完成時將它添加到'onPostExecute()'中的主列表中,並對其他列表執行相同的操作 – codeMagic