1

中央に 1 つの画像を表示している 1 つのキャンバスがあります。この画像はurlでダウンロードされます。実際にはダウンロードする画像がもっとあります。つまり、ユーザーが右をクリックすると次の画像を表示する必要があり、左の場合は別の画像を裏側から表示する必要があります。URLの画像を格納する文字列の配列があります。前の画像と次の画像をバックグラウンドでダウンロードしたい。どうやってするか?

4

2 に答える 2

1

以下は、この要件がさまざまなデバイスで機能するために考慮する必要があるいくつかの問題です。

  1. デバイスのキャンバス サイズに比べて画像が大きい場合はどうなりますか? つまり、画像の寸法 w * h はキャンバス w * h に比べて非常に高いですか?
  2. メモリーの少ないデバイスは、このような大きなイメージをロードできますか?
  3. デバイス間で一貫性のないマルチスレッド モデル。これは、10 スレッドを作成できるデバイスもあれば、2 で停止するデバイスもあります。
  4. 私のアプリケーションは fetch image type をサポートできますか? つまり、.JPG / .GIF をダウンロードしていますが、デバイスがサポートしていません。
  5. 画像をキャッシュする方法は?そのイメージに移動するときに、同じイメージを何度もロードしますか?
  6. 画像コンテンツのダウンロードに TCP/HTTP/RMI を使用する必要がありますか?
  7. このコードは、さまざまな種類の JVM for JavaME 間で移植できますか?

そしてリストは続きます.....

問題に対する建設的な答えを得ることができる上記の問題のセットを念頭に置いて、ネットワーク IO マネージャーとキャッシング マネージャーを作成します。

interface NetworkIoItem {
     Object sourceComponent;

     public void onImageDownload(Image image) {
           //Trigger the source 
     }
}

.

class NetworkIoManager extends Threads {
     Vector pendingRequestQueue;

     :
     :

     public void run() {
           //Wait on the pending request queue

           //Process all the elements in pending request queue
           //and again wait on this queue
     }
}

.

class CacheManager {
     Vector cachedContent;

     public boolean checkIfCached() {
          //Check in the cachedContent whether
          //this image exists if so return true;
     }

     public Image fetchImage() {
          //Check if the image is cached
          //if so return this cached image

          //else push a NetworkIoItem object to 
          //NetworkIOManager pending queue
     }
}

各画像 (現在、左、または右) に対して を呼び出しますCacheManager.fetchImage()。このメソッドは、キャッシュされた画像またはサーバーからダウンロードされた画像を提供します。同じ方法で、画像がキャッシュされていない場合、NetworkIoItemobjbect が pendingQueue にNetworkIoManager 追加され、ダウンロードされます。ダウンロードが完了すると、NetworkIoItem.onImageDownload(...)メソッドがトリガーされます。

J2ME Polish の Touch機能を使用して、NetworkIoManager

このアプローチを使用すると、リクエスト URL に対して非同期の画像フェッチを実行できます。

于 2011-12-08T18:10:47.903 に答える
0

次のようなことをしてください..

Thread t = new Thread(new Runnable(){
  public void run() {
    // Your code to download image here as you were doing earlier,
    // for previous and next image
  }
});

t.start();
于 2011-12-08T17:43:42.953 に答える