目前我在Android中使用软引用缓存来存储图片。该缓存用于显示在ListView中的图片,应当帮助将不在屏幕上显示但仍存在内存中的项目的图像保持在内存中,如果剩余内存足够的话。
问题在于,一旦最后一个硬引用被释放,软引用就会被几乎立即垃圾回收。这意味着从界面中移除的图像在那一刻就被垃圾回收了,如果用户再次滚动到该列表项时,图像会从内部手机存储器重新加载,导致复杂的延迟加载过程,频繁绘制列表和性能下降。
软引用行为的错误请求指出,这是预期行为,应该使用LRU (Least Recently Used) 缓存来缓存这种类型的内容。
现在我的问题来了。 LRU缓存将只使用我允许的内存量。但是,如果应用程序需要大量内存,它将不会释放内存。我应该如何确定可以允许缓存使用多少内存,并且是否有一种方法在手机存储器的内存情况变得紧张时减小缓存大小?
目前,图像缓存保存在应用程序中作为所有活动的全局图像存储。即使我的活动在后台或已销毁,这也会导致我的应用程序持续使用图像缓存的所有内存。