0

如果我在一个数组中有很多位图对象,例如:

BitmapArray[ Bitmap1 , Bitmap2 ,Bitmap3, Bitmap4, Bitmap5,...]

如果数组变大,这最终会占用很多堆栈空间(或堆空间?)。

我现在的问题是,如果我将不再需要的位图清空,这是否会从堆栈(或堆)中释放空间?

BitmapArray[ Bitmap1 ,null,null, Bitmap4,null,...]

我无法删除元素并更改数组大小 btw

4

5 回答 5

1

如果您不保留对位图的任何其他引用,这可以减少您的内存使用量。如果不再引用位图,垃圾收集器可以销毁未使用的对象并释放内存。

于 2012-12-25T18:48:51.467 回答
1

这个位图内存问题的漂亮解决方案是 LRUCache (http://developer.android.com/reference/android/util/LruCache.html)

它是保护您的应用程序免于为位图保留过多内存的有用工具。

但是,如果您仍想使用数组 -请记住在将引用设置为 null 之前在位图上使用 .recycle() 。释放内存后也要使用 System.gc() !

于 2012-12-25T19:49:38.510 回答
0

借助 Collection 之类的 ArrayList

假设 bitmapList 是您的位图列表,那么您可以使用索引来删除它

bitmapList.remove(indexValue);
于 2012-12-25T18:48:29.910 回答
0

位图对象存储在堆上。如果您将数组中的引用设为空并且没有其他引用,则该对象可能会被垃圾回收。

于 2012-12-25T18:48:38.417 回答
0

如果您只想谈论数组,请考虑使用SparseArray

如果您将其用于缓存,请考虑使用更好的缓存机制,该机制将考虑位图的大小,这样就不会占用太多空间。这种机制可能是LruCache,它也包含在兼容性库和bitmapFun示例中。

于 2012-12-25T19:54:36.847 回答