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

时间:2011-04-18 05:06:53

标签: android

我有一个需要从Web解析XML的活动,然后根据XML信息读入图像。为了加快速度,我创建了AsyncTask来进行解析和图像提取。但是,由于“无法从视图创建线程外部更新视图对象...”,我无法将图像放入线程内的活动中。

所以我把所有东西都移回了主要的onCreate例程,它减慢了很多东西,以至于它不可用(UI一直都没有显示(我猜onCreate返回时)。)

有关如何解决此问题的任何想法(即使用AsyncTask进行解析/获取,然后在每个可用时动态放置/更新图像)?或者在生命周期中应该/我可以更新UI吗?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

你是如何使用AsyncTask的?这完全符合您提到的目的:AsyncTask.doInBackground()在一个单独的线程中运行,可用于执行耗时的任务(加载位图),AsyncTask.onPostExecute()在UI线程上运行,可以用于执行必须在UI线程中发生的快速操作(即替换视图中的位图)。

答案 1 :(得分:0)

试试这个:

runOnUiThread(Runnable action)
    //Runs the specified action on the UI thread.

我将此实现为从网络上获取数据后更新ListView ,它就像魅力一样。

如果从这个tutorial(到底部)下载源代码,您可以看到它的工作原理。 : - )

编辑:请参阅此rar文件:(即将发布的教程的Eclipse source code :-))

答案 2 :(得分:0)

异步任务是正确的路线。使用异步任务在后台执行工作,然后使用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.
 }

}

See Async task