我得到一个场景,其中我必须在ArrayList
(Bitmap
或Drawable
)中存储一些图像。当位图出现在脑海中时,我会想到像OutOfMemory
这样的内存问题。ArrayList
和Drawable
有什么区别吗?还是像Bitmap
的ArrayList
?我应该用什么?
这是一个有趣的问题。。。概括我的答案,因为我不知道为什么你需要使用Drawable
/Bitmap
的List
。
老实说,我不会使用它们,因为:
- 位图:这些对象占用了大量内存,如果你不太小心的话,将它们存储在内存中迟早会有害。例如:也许您想通过
Intent
将该列表发送到另一个组件。如果你这样做,并且初始列表没有被销毁,你会遇到这样的情况,即你已经将内存量增加了一倍,因为位图将被反序列化为目标组件端的新对象 - Drawables:
BitmapDrawable
保留对其位图的引用,所以我不认为它比位图本身有什么好处。你可能会"忘记"清除你的Drawables
列表,这样你的内存就泄露了位图。我不认为创建Drawable
会耗费时间或资源以使其值得缓存
要添加更多内容,您必须涵盖所有活动被破坏、重新创建的情况,这样您就不会泄露列表。
就我个人而言,对于从网络下载的位图,我宁愿使用LRUCache
来存储Bitmap
,为它们分配密钥,并将它们备份到磁盘缓存中。我会为他们每个人分配钥匙,并且只使用这些钥匙。有像DiskLRUCache
、picasso或novodaImageLoader这样的库可以帮你很多忙。
资源位图也是如此:只使用键,不需要缓存它们。资源图像应该足够小,以满足您的设备大小+密度,并且足够大,以满足你的需求。
这只是我的看法。。。