我得到一个场景,我必须在ArrayList
(Bitmap
或Drawable
)中存储一些图片。
当我想到位图时,我会考虑像OutOfMemory
这样的内存问题。
ArrayList
的{{1}}会有什么不同吗?或者它会像Drawable
的{{1}}一样?
我该怎么用?
答案 0 :(得分:3)
这是一个有趣的问题......概括我的答案,因为我不知道为什么你需要使用List
Drawable
/ Bitmap
。{/ p>
说实话,我不会同时使用它们,因为:
Intent
将该列表发送到其他组件。如果你这样做并且没有销毁初始列表,那么你将进入一个你将内存量增加一倍的情况,因为位图将被反序列化为目标组件端的新对象。BitmapDrawable
保留对其Bitmap的引用,因此我认为它不会比Bitmap本身提供一些好处。您可能会“忘记”清除Drawables
的列表,这样您的内存就会泄漏位图。我不认为创建Drawable
是耗时或耗费资源以使其值得缓存。要添加更多内容,您必须涵盖销毁活动的所有案例,并重新创建,以免泄露列表。
就个人而言,对于从网络下载的Bitmaps,我宁愿使用LRUCache
来存储Bitmap
,为它们分配密钥并将它们备份到磁盘缓存。我会为每个键分配键,只使用这些键。有DiskLRUCache
,picasso或novoda-ImageLoader等图书馆可以为您提供很多帮助。
同样适用于资源位图:仅使用密钥 - 无需缓存它们。资源图像应该足够小,以适应您的设备尺寸+密度,并且足够大,以满足您的需求。
这只是我的意见......