2014-02-28 89 views
0

背景的Android的AsyncTask得到()形成另一個的AsyncTask()

我有一個的AsyncTask(稱之爲uploadHeader)一些數據上傳到服務器。

我有上傳一些相關的數據的第二的AsyncTask(uploadDetail),這需要初始數據已被上傳:頭載返回由服務器發出的ID,其用於更新本地詳情記錄,之前他們上傳。

如果當時uploadHeader最初被稱爲有連接問題時,頭信息將不會被上傳。 所以在uploadDetail.doInBackground()開始我檢查本地首部記錄的狀態,看它是否已經成功上傳到服務器,如果沒有,調用uploadHeader.get()上傳的頭和等待的將ID後面,在我上傳詳細記錄。

問題

這似乎只是在get()方法調用掛起。調試它,它似乎在創建一個FutureTask,然後在那裏循環。看起來好像第二個AsyncTask在第一個AsyncTask完成後正在排隊運行,這是因爲它在等待第二個AsyncTask。

我讀過關於呼籲從另一個的AsyncTask一些其他職位/文章,但他們似乎都集中於得到兩個並行運行。我想阻止它,直到其他任務結束。還有人提到「必須在UI線程上調用」(Params ...)「,沒有一篇文章提到get()。或者get()與execute()基本相同,以等待結果?

作爲一種變通方法,我可以把HTTP調用上傳的頭在一個單獨的類並調用來自uploadHeaderuploadDetail,所以uploadDetail不會需要創建一個uploadHeader任務。 我只想了解它爲什麼不能正常工作。

+0

如果一個AsyncTask必須等待另一個......爲什麼不把兩個上傳都放在一個AsyncTask中??? – Merlevede

回答

0

get()會阻止您執行,直到第二AsyncTask返回一個值,如果你的第一AsyncTask做一些甚至在工作流程中您所設計的用戶界面上repercutes工作不這樣做。

我肯定會在AsyncTask之間使用Handler s來在它們之間進行通信,如果需要的話,甚至可以使用另一個用於UI的通信。你可以找到一個很好的例子here。作爲參考,請看here