3

アプリケーション画面は、添付の画像のように見えます。複数の行があり、各行にはビットマップ画像、タイトル、説明フィールドがあります。すべての情報は、サポートするWebサーバーからXML形式で取得されます。ここで、オブザーバーデザインパターンを使用しました。これは、HTTP経由でリモートサーバーに接続し、XMLをダウンロードして解析するための個別のスレッドを作成します。XMLには、各行の画像、タイトル、説明のURLが含まれています。

ここに画像の説明を入力してください

私はこれまでいくつかのアプローチを試しましたが、

アプローチ1:

  • 別のメソッド(drawRow())を作成しました。このメソッドは、レイアウトを指定してコンテンツをまとめます。
  • そして、downloadImage()メソッドを使用して、drawRow()メソッドからリモートURLをダウンロードしようとしています。ただし、同じスレッドを使用してダウンロードするとUIがブロックされるため、問題が発生します。

アプローチ2:

上記の問題を検索しているときに、coderholic.comからブラックベリーのWebBitmapFieldに出くわしました。

そして、drawRow()メソッドから以下のコードを使用しています。WebBitmapFieldを理解しているので、ここではオブザーバーデザインパターンを使用しており、画像はUIスレッド以外のスレッドを介してダウンロードされています。5や10のように行数が限られている場合は正常に機能しますが、描画する行数が多い場合は、行TooManyThreadsごとに新しいスレッドが作成されるため、例外がスローされます。

私はこのリンクtaskworker-thread-blackberryを持っていますが、私の要件を達成する方法についてはあまり明確ではありません。

私が理解しているように、ブラックベリーでは、アプリケーションは最大16個のスレッドを作成できます。だから、今私は信じています。最大サイズを10に指定するスレッドプールを作成する必要があるかもしれません。

誰かが私の現在の問題のためにブラックベリーのスレッドプールを理解して実装するのを手伝ってもらえますか?

また、私の要件に合う他の最善のアプローチを教えてくれた人に感謝します。

前もって感謝します。

4

1 に答える 1

4

必要なものはすべて揃っています。それで:

  1. アプリケーション用に作成TaskWorkerします(singeltonを使用)
  2. TaskクラスTaskWorkerfrom-を実装しDownloadImageTaskます(単にfromRunnable.run()からTask.doTask()メソッドにすべてを入れます)
  3. Util.getWebData()呼び出しで新しいスレッドを作成する代わりにTaskWorker.addTask()

おそらくもっと細かい詳細がありますが、それを終了する方法を理解することができます。

そして、最終結果を決定し、画像の変換と逆変換を回避するために、 Callback-success(byte[] data)と-に2つの方法がある方が良いと思います。error(Throwable error)String

于 2012-06-06T14:06:08.740 に答える