Drawable的ArrayList或Bitmap的ArrayList?

时间:2013-07-25 12:00:15

标签: android arraylist bitmap

我得到一个场景,我必须在ArrayListBitmapDrawable)中存储一些图片。 当我想到位图时,我会考虑像OutOfMemory这样的内存问题。 ArrayList的{​​{1}}会有什么不同吗?或者它会像Drawable的{​​{1}}一样? 我该怎么用?

1 个答案:

答案 0 :(得分:3)

这是一个有趣的问题......概括我的答案,因为我不知道为什么你需要使用List Drawable / Bitmap。{/ p>

说实话,我不会同时使用它们,因为:

  1. 位图:这些对象占用大量内存并将这些内存存储在内存中,如果你不太小心,迟早会有害。例如:也许您希望通过Intent将该列表发送到其他组件。如果你这样做并且没有销毁初始列表,那么你将进入一个你将内存量增加一倍的情况,因为位图将被反序列化为目标组件端的新对象。
  2. Drawables:BitmapDrawable保留对其Bitmap的引用,因此我认为它不会比Bitmap本身提供一些好处。您可能会“忘记”清除Drawables的列表,这样您的内存就会泄漏位图。我不认为创建Drawable是耗时或耗费资源以使其值得缓存。
  3. 要添加更多内容,您必须涵盖销毁活动的所有案例,并重新创建,以免泄露列表。

    就个人而言,对于从网络下载的Bitmaps,我宁愿使用LRUCache来存储Bitmap,为它们分配密钥并将它们备份到磁盘缓存。我会为每个键分配键,只使用这些键。有DiskLRUCachepicassonovoda-ImageLoader等图书馆可以为您提供很多帮助。

    同样适用于资源位图:仅使用密钥 - 无需缓存它们。资源图像应该足够小,以适应您的设备尺寸+密度,并且足够大,以满足您的需求。

    这只是我的意见......