我遇到了一种情况,我必须在ArrayList
(Bitmap
或Drawable
)中存储一些图像。当我想到位图时,我会想到内存问题,例如OutOfMemory
. 有什么不同吗ArrayList
?Drawable
还是会像ArrayList
的Bitmap
?我应该使用什么?
问问题
1640 次
1 回答
3
这是一个有趣的问题...概括我的答案,因为我不知道您为什么需要使用List
of Drawable
/ Bitmap
。
老实说,我不会使用它们,因为:
- 位图:这些对象占用大量内存,如果您不太小心,将它们存储在内存中肯定迟早会有害。例如:也许您想将该列表通过 an 发送
Intent
到不同的组件。如果你这样做并且初始列表没有被破坏,你会遇到这样一种情况,你的内存量会增加一倍,因为位图将被反序列化为目标组件端的新对象。 - Drawables: a
BitmapDrawable
保留对其位图的引用,因此我认为它不会比位图本身提供一些好处。您可能“忘记”清除您的列表,Drawables
这样您就已经泄漏了位图。我不认为创建一个Drawable
值得缓存的时间或资源。
要添加更多内容,您必须涵盖所有活动被破坏、重新创建的情况,以免泄露列表。
就个人而言,对于从网络下载的位图,我宁愿使用 aLRUCache
来存储Bitmap
,分配密钥并将它们备份到磁盘缓存中。我会为每个人分配密钥,并且只使用这些密钥。有像picasso或novoda-ImageLoaderDiskLRUCache
这样的库对您有很大帮助。
同样适用于资源位图:仅使用键 - 无需缓存它们。资源图像应该足够小以满足您的设备尺寸 + 密度,并且足够大以满足您的需求。
这只是我的意见...
于 2013-07-25T12:41:48.590 回答