0

現在、ListViews にリストされている内部メモリ ビットマップを保持するクラスがいくつかあります。

一覧表示したら、返してほしい画像の名前を伝えるメソッドに頼り、対応するビットマップを受け取ります。

アプリケーションの起動時に、必要なすべての画像をメモリ ( HashMap ) にロードします。画像を内部メモリからリストビューに直接ロードすると、プロセスに時間がかかります。

私はビューのリサイクルを使用しており、各アイテムには2つと2つのイメージビューとテキストビューがあります。ただし、スクロールは非常に遅く、多くのラグがあります。

画像をメモリ (ハッシュマップ) に保存するのは良い解決策ですか? リストの時点でメモリにロードするため、さらに遅くなります。画像は 100x100 ピクセルです。

私の質問は次のとおりです。ラグに関する私の問題は、画像がすべてメモリ内にあるという事実に関係している可能性がありますか? 最善の解決策は何ですか?

編集:

07-25 16:56:33.195: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.195: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.203: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.203: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.210: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.257: V/ADAPTER(8648): recicling view [16]
07-25 16:56:33.265: V/ADAPTER(8648): recicling view [15]
07-25 16:56:33.273: V/ADAPTER(8648): recicling view [14]
07-25 16:56:33.281: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.296: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.296: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.304: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.312: V/ADAPTER(8648): recicling view [7]
07-25 16:56:33.320: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.328: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.328: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.335: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.335: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.343: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.343: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.359: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.359: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.375: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.382: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.398: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.398: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.406: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.406: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.414: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.414: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.484: V/ADAPTER(8648): recicling view [13]
07-25 16:56:33.492: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.500: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.500: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.515: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.523: V/ADAPTER(8648): recicling view [7]
07-25 16:56:33.531: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.539: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.539: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.546: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.546: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.554: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.554: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.562: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.570: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.585: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.585: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.609: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.609: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.617: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.617: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.625: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.625: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.679: V/ADAPTER(8648): recicling view [12]
07-25 16:56:33.687: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.695: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.695: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.703: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.703: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.710: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.710: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.718: V/ADAPTER(8648): recicling view [7]
07-25 16:56:33.734: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.734: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.742: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.742: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.750: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.750: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.757: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.765: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.781: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.781: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.789: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.804: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.820: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.820: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.875: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.882: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.890: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.890: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.898: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.898: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.906: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.914: V/ADAPTER(8648): recicling view [7]
07-25 16:56:33.929: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.929: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.937: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.937: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.945: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.953: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.953: V/ADAPTER(8648): recicling view [6]
07-25 16:56:33.968: V/ADAPTER(8648): recicling view [0]
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [1]
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [2]
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [3]
07-25 16:56:33.984: V/ADAPTER(8648): recicling view [4]
07-25 16:56:33.984: V/ADAPTER(8648): recicling view [5]
07-25 16:56:33.992: V/ADAPTER(8648): recicling view [6]
07-25 16:56:34.007: V/ADAPTER(8648): recicling view [0]
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [1]
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [2]
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [3]
07-25 16:56:34.023: V/ADAPTER(8648): recicling view [4]
07-25 16:56:34.031: V/ADAPTER(8648): recicling view [5]

スクロールするたびに(リストが続く)、この出力が得られます。[] 内のコンテンツは位置に対応します。彼が常に0-6の位置を示しているのは奇妙ではありませんか?

編集

今考えられる理由を発見しました。

私は現在、必要なすべてのビューがある tab_activity です。xml に tab_activity top_bar を追加しました。そこには、常に変更されている画像があります。画像が自動モード (常に変更されている) の場合、タブ内にある ListViews は「再描画」されるため、遅延が発生します。

xのイメージをx時間で変えるサービス(音楽)を利用しています。

画像が再描画されているのを表示すると、ListView が再描画されるのはなぜですか?

4

1 に答える 1

0

画像の読み込みが遅れを引き起こしているかどうかはわかりませんが、そうであれば、画像が読み込まれていることをユーザーに報告する何らかの UI を作成することをお勧めします。(画像が遅延を引き起こしているかどうかを確認するには、DDMS を確認して、LogCat で単純にログを記録することをお勧めします)

次のコードを使用して、ビットマップをメモリに保存します。

以下はメモリに書き込みます。

public void writeBitmapToMemory(String filename, Bitmap bitmap) {
        FileOutputStream fos;
        // Use the compress method on the Bitmap object to write image to the OutputStream
        try {
            fos = game.openFileOutput(filename, Context.MODE_PRIVATE);
            // Writing the bitmap to the output stream
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
            // this.gameEngineLog.d(classTAG, "Bitmap successfully written: " + filename);
        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();
            // this.gameEngineLog.d(classTAG, "Bitmap couldn't be written: " + filename);

        } 
        catch (IOException e) {
            e.printStackTrace();
            // this.gameEngineLog.d(classTAG, "Bitmap couldn't be written: " + filename);

        }

    }

これはメモリから読み取ります:

public Bitmap readBitmapFromMemory(String filename) {
        Bitmap defautBitmap = null;
        File filePath = game.getFileStreamPath(filename);
        FileInputStream fi;
        try {
            fi = new FileInputStream(filePath);
            defautBitmap = BitmapFactory.decodeStream(fi);
            // this.gameEngineLog.d(classTAG, "Bitmap successfully read: " + filename);
        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();
            // this.gameEngineLog.d(classTAG, "Bitmap couldn't be opened: " + filename);
        }

        return defautBitmap;

    }
于 2012-07-25T16:06:46.520 に答える