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