内存管理逻辑的总可用内存

时间:2012-04-25 15:58:13

标签: android

我在释放内存方面遇到了问题。我有一个Hashmap我在其中添加Bitmap,并且位图的数量非常大。出于这个原因,我得到OutOfMemoryError。所以为此,我决定发布Bitmap,这是Collection中使用最少的,内存紧缩或系统内存不足的原因。

为了获得当前可用的内存,我使用了“ ActivityManager.MemoryInfo.availMem ”,但是它给出了总RAM大小的内存,而不是可用的堆内存。我发现这个内存在从集合中发布 Bitmap时没有得到更新。

然后我使用了这三种方法:

Debug.getNativeHeapAllocatedSize()
Debug.getNativeHeapFreeSize()
Debug.getNativeHeapSize()

但我发现NativeHeapSize继续增加到某个特定级别,比如16 MB,在发生OutOfMemoryError之后发生变化。同样,我发现从NativeHeapAllocatedSize发布getNativeHeapSizeBitmapCollection并未减少。

如何解决这个问题?

我的问题是我想计算分配的最大可用应用程序内存和当前可用内存,这样如果当前可用内存超出阈值内存,我将从集合中释放一些Bitmapgarbage collection将回收内存并释放它而不会产生错误。

1 个答案:

答案 0 :(得分:0)

Bitmaps存储在内存中非常昂贵。根据图像格式,每个像素最多可占用4个字节的内存。

您是否同时展示了Collection的{​​{1}}个整数?如果不是,我强烈建议商店存储未显示的Bitmaps,而是为图片存储Bitmaps并在需要时即时加载。

如果您正在显示整个集合,我会确保您将位图缩减到适当的大小,这样您就不会存储未渲染的像素。