我在释放内存方面遇到了问题。我有一个Hashmap
我在其中添加Bitmap
,并且位图的数量非常大。出于这个原因,我得到OutOfMemoryError
。所以为此,我决定发布Bitmap
,这是Collection
中使用最少的,内存紧缩或系统内存不足的原因。
为了获得当前可用的内存,我使用了“ ActivityManager.MemoryInfo.availMem ”,但是它给出了总RAM大小的内存,而不是可用的堆内存。我发现这个内存在从集合中发布 Bitmap时没有得到更新。
然后我使用了这三种方法:
Debug.getNativeHeapAllocatedSize()
Debug.getNativeHeapFreeSize()
Debug.getNativeHeapSize()
但我发现NativeHeapSize继续增加到某个特定级别,比如16 MB,在发生OutOfMemoryError
之后发生变化。同样,我发现从NativeHeapAllocatedSize
发布getNativeHeapSize
时Bitmap
和Collection
并未减少。
如何解决这个问题?
我的问题是我想计算分配的最大可用应用程序内存和当前可用内存,这样如果当前可用内存超出阈值内存,我将从集合中释放一些Bitmap
并garbage collection将回收内存并释放它而不会产生错误。
答案 0 :(得分:0)
将Bitmaps
存储在内存中非常昂贵。根据图像格式,每个像素最多可占用4个字节的内存。
您是否同时展示了Collection
的{{1}}个整数?如果不是,我强烈建议商店不存储未显示的Bitmaps
,而是为图片存储Bitmaps
并在需要时即时加载。
如果您正在显示整个集合,我会确保您将位图缩减到适当的大小,这样您就不会存储未渲染的像素。