如何在Android中实现内存映像缓存?

Jan*_*usz 12 android android-lru-cache

到目前为止,我在Android中使用SoftReference Cache来处理图像.此缓存用于ListView中显示的图像,如果有足够的内存,应该有助于保存内存中未显示的项目图像.

这个问题是SoftReferences几乎是在最后一个硬引用发布的那一刻被垃圾收集的.结果是,从屏幕上移除的图像在那时被垃圾收集,并且如果用户在ListView中滚动回到该条目,则从内部电话存储器重新加载图像,导致复杂的延迟加载过程,从而导致频繁重绘列表和一般性能不佳.

软引用行为的错误请求表明这是预期的行为,您应该使用LRU-Cache来缓存此类内容.

知道我的问题.LRU缓存只会占用我允许的内存量.但如果应用程序需要大量内存,则无法释放内存.我应该如何确定我可以允许缓存使用多少内存,如果手机的内存情况变得紧张,有没有办法减少缓存的大小?

目前,图像缓存作为一种用于所有活动的全局图像存储保存在应用程序内.这将导致我的应用程序不断使用图像缓存的所有内存,即使我的活动在后台或被破坏.

Jes*_*son 3

保持后台进程处于活动状态是一种操作系统级别的优化,可以快速切换回进程。仅当操作系统能够提供内存时,您的进程才会保持活动状态;当另一个应用程序需要该内存时,您的进程将被终止并释放其资源。

如果每次进程在后台运行时都释放缓存,则切换回应用程序的速度将不再快,因为它会出现缓存未命中的情况。这破坏了 Android 的 keep-background-processes-alive 优化!

您应该只使用 LruCache 它也包含在Android 3.0 (Honeycomb) 之前版本的Android 支持包中。