1

我遇到了一种情况,我必须在ArrayListBitmapDrawable)中存储一些图像。当我想到位图时,我会想到内存问题,例如OutOfMemory. 有什么不同吗ArrayListDrawable还是会像ArrayListBitmap?我应该使用什么?

4

1 回答 1

3

这是一个有趣的问题...概括我的答案,因为我不知道您为什么需要使用Listof Drawable/ Bitmap

老实说,我不会使用它们,因为:

  1. 位图:这些对象占用大量内存,如果您不太小心,将它们存储在内存中肯定迟早会有害。例如:也许您想将该列表通过 an 发送Intent到不同的组件。如果你这样做并且初始列表没有被破坏,你会遇到这样一种情况,你的内存量会增加一倍,因为位图将被反序列化为目标组件端的新对象。
  2. Drawables: aBitmapDrawable保留对其位图的引用,因此我认为它不会比位图本身提供一些好处。您可能“忘记”清除您的列表,Drawables这样您就已经泄漏了位图。我不认为创建一个Drawable值得缓存的时间或资源。

要添加更多内容,您必须涵盖所有活动被破坏、重新创建的情况,以免泄露列表。

就个人而言,对于从网络下载的位图,我宁愿使用 aLRUCache来存储Bitmap,分配密钥并将它们备份到磁盘缓存中。我会为每个人分配密钥,并且只使用这些密钥。有像picassonovoda-ImageLoaderDiskLRUCache这样的库对您有很大帮助。

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

这只是我的意见...

于 2013-07-25T12:41:48.590 回答