1

ArrayList(Bitmapまたは)にいくつかの画像を保存する必要があるシナリオが 1 つありますDrawable。ビットマップが頭に浮かぶとき、私はメモリの問題について考えますOutOfMemory. 違いはArrayListありますか?DrawableそれとものようになりますArrayListBitmap?何を使えばいいですか?

4

1 に答える 1

3

Listこれは興味深い質問です... Drawable/を使用する必要がある理由がわからないので、私の答えを一般化しますBitmap

正直に言うと、次の理由からどちらも使用しません。

  1. ビットマップ: これらのオブジェクトは大量のメモリを占有し、これらをメモリに保存すると、注意しすぎないと遅かれ早かれ確実に害を及ぼす可能性があります。Intent例: おそらく、そのリストを を介して別のコンポーネントに送信したいとします。それを行い、最初のリストが破棄されない場合、ビットマップがターゲット コンポーネント側で新しいオブジェクトとして逆シリアル化されるため、メモリ量が 2 倍になる場合があります。
  2. Drawables: aBitmapDrawableは Bitmap への参照を保持しているため、Bitmap 自体よりも利点があるとは思えません。リストをクリアするのを「忘れる」可能性がありDrawables、このようにしてビットマップのメモリリークが発生します。Drawableを作成するのに、キャッシュする価値があるほど時間やリソースを消費するとは思いません。

さらに追加するには、リストを漏らさないように、アクティビティが破棄され、再作成されるすべてのケースをカバーする必要があります。

個人的に言えば、ネットワークからダウンロードしたビットマップの場合は、 を使用してLRUCacheを保存しBitmap、それらにキーを割り当てて、ディスク キャッシュにバックアップします。それぞれにキーを割り当て、これらのキーでのみ機能します。、 picassonovoda-ImageLoaderDiskLRUCacheなど、非常に役立つライブラリがあります。

リソース ビットマップにも同じことが当てはまります。キーでのみ機能します。キーをキャッシュする必要はありません。リソース イメージは、デバイスのサイズ + 密度に対して十分に小さく、必要に応じて十分大きくする必要があります。

それは私の意見です...

于 2013-07-25T12:41:48.590 に答える