2012-02-13 63 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