可绘制的数组列表或位图的数组列表



我得到一个场景,其中我必须在ArrayListBitmapDrawable)中存储一些图像。当位图出现在脑海中时,我会想到像OutOfMemory这样的内存问题。ArrayListDrawable有什么区别吗?还是像BitmapArrayList?我应该用什么?

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

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

  1. 位图:这些对象占用了大量内存,如果你不太小心的话,将它们存储在内存中迟早会有害。例如:也许您想通过Intent将该列表发送到另一个组件。如果你这样做,并且初始列表没有被销毁,你会遇到这样的情况,即你已经将内存量增加了一倍,因为位图将被反序列化为目标组件端的新对象
  2. Drawables:BitmapDrawable保留对其位图的引用,所以我不认为它比位图本身有什么好处。你可能会"忘记"清除你的Drawables列表,这样你的内存就泄露了位图。我不认为创建Drawable会耗费时间或资源以使其值得缓存

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

就我个人而言,对于从网络下载的位图,我宁愿使用LRUCache来存储Bitmap,为它们分配密钥,并将它们备份到磁盘缓存中。我会为他们每个人分配钥匙,并且只使用这些钥匙。有像DiskLRUCache、picasso或novodaImageLoader这样的库可以帮你很多忙。

资源位图也是如此:只使用键,不需要缓存它们。资源图像应该足够小,以满足您的设备大小+密度,并且足够大,以满足你的需求。

这只是我的看法。。。

最新更新