繁体   English   中英

Android-减少位图可绘制对象的内存使用

[英]Android - Reduce the memory usage of Bitmap Drawables

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

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

当我从Gowalla下载图像时,我已经根据屏幕尺寸(对于HDPI为48x48,对于MDPI为32x32等)按比例缩小图像,因此这些图像不是很大的图像,但是我仍然不得不选择可能导致我的应用崩溃或图标闪烁进出之间。 还有其他方法可以减少位图使用的内存吗?

不幸的是,这始终是一个问题。 您可以尝试下采样。 将图像加载到位图对象时出现内存不足问题

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

闪烁问题是由于使用软引用引起的 Android会积极清除它们,因此不建议在文档中使用它们。 我猜想它们仅在Android中具有兼容性。 我应该一直使用LruCache代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM