如果我在数组中有很多位图对象 例如:
BitmapArray[ Bitmap1 , Bitmap2 ,Bitmap3, Bitmap4, Bitmap5,...]
如果数组变大,这将最终占用大量的堆栈空间(或堆空间?)。
我现在的问题是,如果我将Bitmaps归零,我不再需要它,这是从堆栈(或堆)中释放的空间吗?
BitmapArray[ Bitmap1 ,null,null, Bitmap4,null,...]
我无法移除元素并更改数组大小btw
答案 0 :(得分:1)
如果您没有持续任何对位图的其他引用,这可能会减少您的内存使用量。如果不再引用位图,则垃圾收集器可以销毁未使用的对象并释放内存。
答案 1 :(得分:1)
这个位图内存问题很好看的解决方案是LRUCache(http://developer.android.com/reference/android/util/LruCache.html)
这是保护您的应用免于为位图预留太多内存的有用工具。
但是如果您仍然想要使用数组 - 请记住在Bitmap上使用.recycle(),然后再将引用设置为null。在释放内存后也使用System.gc()!
答案 2 :(得分:0)
借助像ArrayList这样的Collection
假设bitmapList是您的位图列表,那么您可以使用索引将其删除,如
bitmapList.remove(indexValue);
答案 3 :(得分:0)
位图对象存储在堆上。如果在数组中引用为null并且没有其他引用,则该对象可能是垃圾回收。
答案 4 :(得分:0)
如果您只想谈论数组,请考虑使用SparseArray。
如果您将其用于缓存,请考虑使用更好的缓存机制,该机制将考虑位图的大小,以便它永远不会占用太多空间。这样的机制可以是LruCache,它也包含在兼容性库和bitmapFun示例中。