如何从网络服务器异步下载图像

问题描述:

我的应用程序屏幕与附加的图像类似。我有多行,每行有一个位图图像,标题和说明字段。所有信息都以XML的形式从我们的支持Web服务器获取。现在,我使用了观察者设计模式,它创建了一个单独的线程,用于通过HTTP连接到我的远程服务器,下载并解析XML。 XML包含每行的图片,标题和描述的URL。如何从网络服务器异步下载图像

enter image description here

我曾尝试几种方法,到目前为止,

方法1:

  • 创建一个单独的方法(drawRow()),它把内容一起照顾通过指定布局。
  • 然后,然后使用方法downloadImage(),我试图从drawRow()方法下载远程URL。 但它很糟糕,因为它使用相同的线程下载并且UI被阻止。

方法2:

在寻找上述问题,我碰到WebBitmapField黑莓来自coderholic.com

然后,我从我的drawRow()方法使用下面的代码。据我了解WebBitmapField,这里是使用观察者设计模式和图像正在线程以外的UI线程下载。当我的行数有限或者像5或者10时,它工作的很好。但是当我有更多的行数被绘制时,它会抛出异常,因为它会为每行创建一个新的线程。

我已经得到这个链接taskworker-thread-blackberry,但如何达到我的要求并不太清楚。

据我所知,在黑莓中,应用程序最多可以创建16个线程。所以,现在我相信。我可能需要创建一个线程池,指定最大大小为10.

任何人都可以请帮我理解和实现黑莓线程池我当前的问题?

此外,我感谢任何人给我任何其他最适合我的要求的最佳方法。

在此先感谢。

你有你需要的一切。所以:

  1. 为应用程序创建一个TaskWorker(使用singelton)
  2. 从实施TaskTaskWorker - DownloadImageTask(简单地把一切从Runnable.run()Task.doTask()方法)
  3. 而不是新的线程创建在Util.getWebData()通话TaskWorker.addTask()

有可能更多的小细节,但你可以弄清楚如何完成它。

我认为最好在Callback-success(byte[] data)error(Throwable error)有两种方法 - 确定最终结果并将图像转换为String并返回。