ArrayList
(Bitmap
または)にいくつかの画像を保存する必要があるシナリオが 1 つありますDrawable
。ビットマップが頭に浮かぶとき、私はメモリの問題について考えますOutOfMemory
. 違いはArrayList
ありますか?Drawable
それとものようになりますArrayList
かBitmap
?何を使えばいいですか?
質問する
1640 次
1 に答える
3
List
これは興味深い質問です... Drawable
/を使用する必要がある理由がわからないので、私の答えを一般化しますBitmap
。
正直に言うと、次の理由からどちらも使用しません。
- ビットマップ: これらのオブジェクトは大量のメモリを占有し、これらをメモリに保存すると、注意しすぎないと遅かれ早かれ確実に害を及ぼす可能性があります。
Intent
例: おそらく、そのリストを を介して別のコンポーネントに送信したいとします。それを行い、最初のリストが破棄されない場合、ビットマップがターゲット コンポーネント側で新しいオブジェクトとして逆シリアル化されるため、メモリ量が 2 倍になる場合があります。 - Drawables: a
BitmapDrawable
は Bitmap への参照を保持しているため、Bitmap 自体よりも利点があるとは思えません。リストをクリアするのを「忘れる」可能性がありDrawables
、このようにしてビットマップのメモリリークが発生します。Drawable
を作成するのに、キャッシュする価値があるほど時間やリソースを消費するとは思いません。
さらに追加するには、リストを漏らさないように、アクティビティが破棄され、再作成されるすべてのケースをカバーする必要があります。
個人的に言えば、ネットワークからダウンロードしたビットマップの場合は、 を使用してLRUCache
を保存しBitmap
、それらにキーを割り当てて、ディスク キャッシュにバックアップします。それぞれにキーを割り当て、これらのキーでのみ機能します。、 picasso、novoda-ImageLoaderDiskLRUCache
など、非常に役立つライブラリがあります。
リソース ビットマップにも同じことが当てはまります。キーでのみ機能します。キーをキャッシュする必要はありません。リソース イメージは、デバイスのサイズ + 密度に対して十分に小さく、必要に応じて十分大きくする必要があります。
それは私の意見です...
于 2013-07-25T12:41:48.590 に答える