2012-06-06 114 views
3

我的應用程序屏幕與附加的圖像類似。我有多行,每行有一個位圖圖像,標題和說明字段。所有信息都以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.

任何人都可以請幫我理解和實現黑莓線程池我當前的問題?

此外,我感謝任何人給我任何其他最適合我的要求的最佳方法。

在此先感謝。

回答

4

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

  1. 爲應用程序創建一個TaskWorker(使用singelton)
  2. 從實施TaskTaskWorker - DownloadImageTask(簡單地把一切從Runnable.run()Task.doTask()方法)
  3. 而不是新的線程創建在Util.getWebData()通話TaskWorker.addTask()

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

我認爲最好在Callback-success(byte[] data)error(Throwable error)有兩種方法 - 確定最終結果並將圖像轉換爲String並返回。