Android:从线程中加载/替换图像



我有一个需要从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源代码:-))

最新更新