我正在考虑在 Android 应用程序中实现第一层缓存。我正在考虑使用 SoftReferences 来确保避免 OOM 异常,但由于有很多关于 Android 如何“过早”释放这些异常的文章,我决定研究 android.util.LruCache 缓存。
问题:如何为实际设备正确调整尺寸?LRU 缓存是真正的解决方案而不是软引用,这听起来非常好,但如果你真的很想避免 OOM 异常,那么使用任意数量的兆字节硬引用会感觉非常不安全。如果你问我,那是不安全的。无论如何,这似乎是唯一的选择。我正在研究 getMemoryClass 以找出实际设备上应用程序的堆大小(+在调整缓存大小之前检查可用堆大小)。基线是 16 Megs,这听起来不错,但我见过设备(例如过去的 G1)抛出 OOM 异常,堆大小约为 5 MB(根据 Eclipse MAT)。我知道 G1 已经很老了,但关键是我的经验与文档中提到的 16 Megs 基线并不相符。因此我' 我完全不确定如果我需要我能合理获得的最大容量,我应该如何扩展 LRU 缓存。(对 8 Megs 会很满意,在低规格设备上会使用小至 1 Megs)
感谢您的任何提示。
编辑:我指的Android LRU缓存类:http: //developer.android.com/reference/android/util/LruCache.html