我有一个需要从web解析XML的活动,然后根据XML信息读取图像。为了加快速度,我创建了AsyncTask来执行解析和图像获取。然而,我不能把图像从线程内的活动由于"不能更新视图对象从外部视图创建线程…"
所以我把所有东西都移回主onCreate例程,它减慢了很多事情,它是不可用的(UI不显示,直到一切都完成(我猜当onCreate返回))。
关于如何解决这个问题的任何想法(即解析/抓取使用AsyncTask,然后放置/更新图像动态时,每个变得可用)?或者我应该/可以在生命周期的什么地方更新UI?
提前感谢您的帮助。
你如何使用AsyncTask?这正是你提到的目的:AsyncTask.doInBackground()
在一个单独的线程中运行,可以用来做耗时的任务(加载位图),AsyncTask.onPostExecute()
在UI线程上运行,可以用来执行必须在UI线程中发生的快速操作(即替换视图中的位图)。
异步任务是正确的路由。使用异步任务在后台完成工作,然后使用onpostexecute。
private class DownloadFilesTask extends AsyncTask<URL, Integer, imageview> {
protected imageView doInBackground(URL... urls) {
//parse and load
}
protected void onProgressUpdate(Integer... progress) {
//update progress if you have progress dialog
}
protected void onPostExecute(imageView result) {
//load image into view.
}
}
参见Async task
试试这个:
runOnUiThread(Runnable action)
//Runs the specified action on the UI thread.
我实现了这个更新ListView后从web获取数据,它像一个魅力。
如果您从教程(到底部)下载源代码,您可以看到它是如何工作的实现。: -)
编辑:查看这个rar文件:(即将发布的教程的Eclipse源代码:-))