0

我在释放内存时遇到问题。我有一个Hashmap我正在添加一个Bitmap,并且位图的数量非常大。出于这个原因,我得到OutOfMemoryError. 因此,为此我决定在内存紧缩或系统堆内存不足时释放Bitmap最少使用的内容。Collection

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

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

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

但我发现 NativeHeapSize 继续增加到某个水平,比如 16 MB,然后OutOfMemoryError发生变化。在这方面,我发现NativeHeapAllocatedSizeandgetNativeHeapSize并没有BitmapCollection.

我该如何解决这个问题?

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

4

1 回答 1

0

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

您是否同时显示Collection全部Bitmaps?如果不是,我强烈建议 store不要存储未显示Bitmaps的内容,而是URI为图像存储 a 并在需要时动态加载它。

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

于 2012-04-25T16:08:23.070 回答