2012-02-13 62 views
0

我下載一個RSS源,然後解析它在一個類中,rssfeed被保存爲一個自定義對象;但是作爲Feed的代碼塊相對較大,Android通常只能在EDGE上工作。ASyncTask Android使用主線程下載的對象線程

我想把文件下載到一個帶有無限制進度對話框的AsyncTask中。

我也希望能夠從主線程內的ASynctask中下載後訪問rssfeed對象。我如何參考它?

+1

http://developer.android.com/reference/android/os/AsyncTask.html – waqaslam 2012-02-13 14:47:44

+0

我已經看過那個,我只是不明白我猜它是關於從主線程調用的部分。這是否意味着在我調用ASyncTask的execute()方法之後,我還會從主UI調用onPostExecute()? – 2012-02-13 14:50:55

+0

考慮這個答案:http://stackoverflow.com/questions/4489399/asynctask-where-return-value-of-doinbackground-goes – 2012-02-13 14:54:35

回答

1

當您構建一個AsyncTask時,第三個通用參數是結果,並且當您執行asyn任務時,可以調用get來檢索Result對象。根據主線程上的對象需要做什麼,還可以重寫AsyncTask的onPostExecute方法,該方法將在doInBackground完成後在主線程上運行。這可能是最好的選擇,在AsyncTask上重寫onPostExecute。

+0

get()是一個阻塞調用嗎? 'RssFeedObject RFO;'' 任務的AsyncTask =新的AsyncTask;'' task.execute();'' RFO = task.get();' 是不是會導致UI線程掛起,直到rssfeedObject做完了? – 2012-02-13 15:22:00

+0

是的,從UI線程調用'get()'將使其等待,直到任務完成。 – 2012-02-13 15:25:57

+1

如果你不想阻止,最好的辦法是檢查覆蓋onPostExecute。這讓你的主線程執行沒有阻塞。 – 2012-02-13 15:30:09