3

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

在此处输入图像描述

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

方法一:

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

方法二:

在搜索上述问题时,我从coderholic.com 遇到了黑莓中的WebBitmapField

然后,我使用 drawRow() 方法中的以下代码。据我了解 WebBitmapField,这里使用的是观察者设计模式,并且图像是通过 UI 线程以外的线程下载的。当我的行数有限(如 5 或 10)时,它可以正常工作。但是当我要绘制的行数更多时,它会引发TooManyThreads异常,因为它会为每一行创建一个新线程。

我有这个链接taskworker-thread-blackberry,但不太清楚如何实现我的要求。

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

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

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

提前致谢。

4

1 回答 1

4

You have everything what you need. So:

  1. Create one TaskWorker for your application (use singelton)
  2. Implement Task class from TaskWorker - DownloadImageTask (simply put everything from Runnable.run() to Task.doTask() method)
  3. Instead of new thread creation in Util.getWebData() call TaskWorker.addTask()

There are probably more minor details but you could figure out how to finish it.

And I think it's better to have two method in Callback - success(byte[] data) and error(Throwable error) - to determine end result and escape converting images to String and back.

于 2012-06-06T14:06:08.740 回答