我有一个需要从Web解析XML的活动,然后根据XML信息读入图像。为了加快速度,我创建了AsyncTask来进行解析和图像提取。但是,由于“无法从视图创建线程外部更新视图对象...”,我无法将图像放入线程内的活动中。
所以我把所有东西都移回了主要的onCreate例程,它减慢了很多东西,以至于它不可用(UI一直都没有显示(我猜onCreate返回时)。)
有关如何解决此问题的任何想法(即使用AsyncTask进行解析/获取,然后在每个可用时动态放置/更新图像)?或者在生命周期中应该/我可以更新UI吗?
提前感谢您的帮助。
答案 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.
}
}