如何从网络服务器异步下载图像
问题描述:
我的应用程序屏幕与附加的图像类似。我有多行,每行有一个位图图像,标题和说明字段。所有信息都以XML的形式从我们的支持Web服务器获取。现在,我使用了观察者设计模式,它创建了一个单独的线程,用于通过HTTP连接到我的远程服务器,下载并解析XML。 XML包含每行的图片,标题和描述的URL。如何从网络服务器异步下载图像
我曾尝试几种方法,到目前为止,
方法1:
- 创建一个单独的方法(drawRow()),它把内容一起照顾通过指定布局。
- 然后,然后使用方法downloadImage(),我试图从drawRow()方法下载远程URL。 但它很糟糕,因为它使用相同的线程下载并且UI被阻止。
方法2:
在寻找上述问题,我碰到WebBitmapField黑莓来自coderholic.com。
然后,我从我的drawRow()方法使用下面的代码。据我了解WebBitmapField,这里是使用观察者设计模式和图像正在线程以外的UI线程下载。当我的行数有限或者像5或者10时,它工作的很好。但是当我有更多的行数被绘制时,它会抛出异常,因为它会为每行创建一个新的线程。
我已经得到这个链接taskworker-thread-blackberry,但如何达到我的要求并不太清楚。
据我所知,在黑莓中,应用程序最多可以创建16个线程。所以,现在我相信。我可能需要创建一个线程池,指定最大大小为10.
任何人都可以请帮我理解和实现黑莓线程池我当前的问题?
此外,我感谢任何人给我任何其他最适合我的要求的最佳方法。
在此先感谢。
答
你有你需要的一切。所以:
- 为应用程序创建一个
TaskWorker
(使用singelton) - 从实施
Task
类TaskWorker
-DownloadImageTask
(简单地把一切从Runnable.run()
到Task.doTask()
方法) - 而不是新的线程创建在
Util.getWebData()
通话TaskWorker.addTask()
有可能更多的小细节,但你可以弄清楚如何完成它。
我认为最好在Callback
-success(byte[] data)
和error(Throwable error)
有两种方法 - 确定最终结果并将图像转换为String
并返回。