2012-10-10 116 views
1

雖然我還沒有嘗試過,但從理論的角度來看,我只是爲了澄清我的疑問而提出這個問題。從AsyncTask調用AsyncTask

我有這樣一個場景: 1.向服務器發送請求並收到JSON響應。爲此,我使用AsyncTask,因爲可能會延遲接收響應。 2.從此響應獲取圖像URL。 3.再使用一個AsyncTask,調用圖像URL並獲取圖像。 (再次可能需要時間來獲取圖像)

那麼你認爲使用2個AyncTask只是爲了獲得該圖像效率低下。 或者,在步驟1中,不是使用AsyncTask,而是依次運行代碼並設置Timeout。

請建議。

+3

我可能會丟失一些東西,但是有什麼理由不能在Asynctask的線程(doInBackground)中同步獲取圖像嗎? – dennisdrew

+3

是啊,這一切都在1 asnyctask – binnyb

+1

如果圖像數量很大,你可以使用[LazyLoading](http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-在列表視圖中加載圖像) –

回答

1

我要繼續前進,並建議將此作爲一個答案,這原本是我的評論:

只是同步獲取的圖像中,你從提取的JSON相同的AsyncTask。例如:

doInBackground(Void...params){ 
    //fetch JSON 
    // once JSON is fetched, fetch image 
} 
0

不知道你怎麼想正是這種結構,但文件說:

execute(Params...) must be invoked on the UI thread. 

http://developer.android.com/reference/android/os/AsyncTask.html

,所以你不能從其他異步任務後臺方法執行新的異步任務。

即使您嘗試使用進度方法執行此操作,然後由於HONEYCOMB asynctasks已序列化,所以您的第二個異步任務無論如何都會排隊 - 您必須使用THREAD_POOL_EXECUTOR才能使其並行運行。

+0

難道他不能在第一個任務的onPostExecute(如果他選擇繼續使用2 Asynctask方法)技術上進行調用嗎? – dennisdrew

+0

當然,但在我看來,一項任務應該更有效率,並且會降低複雜性。 – marcinj

+1

問題措辭的方式,這聽起來像他問他是否可以在AsyncTask的doInBackground()中啓動它。他*可以*在onPostExecute中調用新的AsyncTask,如果他由於某種原因想要保持兩個對象的實現是分開的。如果有多種方式在應用中獲取圖片網址,這可能是可取的。然後他可以在任何情況下重用第二個AsyncTask。 – DeeV