Android - 减少Bitmap Drawables的内存使用量

时间:2010-10-23 17:01:54

标签: android memory map bitmap

我的应用程序中有一张地图,显示了Gowalla的位置。我使用带有简单默认标记的ItemizedOverlay,但是当绘制项目时,我将默认标记与Gowalla中的位置图标下载9并缓存在磁盘上交换。

问题在于,如果屏幕上有很多位置(例如30),内存中位图的大小足以使活动崩溃。为了防止这种情况,我只将SoftReferences保留在位图中。不幸的是,这意味着位置将在默认标记和图标之间闪烁(即,图标被加载,但是存在压力,因此它们被移除,但随后因为它们在屏幕上而重新加载......)。 / p>

当我从Gowalla下载图像时,我已根据屏幕尺寸缩小它们(HDPI为48x48,MDPI为32x32等),所以这些不是很大的图像,但我仍然是被迫选择可能导致我的应用程序崩溃或图标闪烁的情况。还有其他方法可以减少Bitmap使用的内存吗?

2 个答案:

答案 0 :(得分:1)

遗憾的是,这将永远是一个问题。您可以尝试下采样。 Strange out of memory issue while loading an image to a Bitmap object

您可以尝试将图像保存到临时文件系统,这样您就不必每次都能访问网络。这应该对闪烁有很大帮助甚至100%。结合使用基于访问的堆缓存(如果你觉得要构建一个),你可能很好。

答案 1 :(得分:0)

闪烁问题是由于使用了Soft References。 Android积极清除它们,并且不建议在文档中使用它们。我猜他们只是在Android中才兼容。我应该使用LruCache代替。