LRU cache in Android

曾经我们使用 WeakReference 来处理 Android 中 Out of Memory 的问题。但是随着 Google 修改了回收机制的行为,这个方法已经没什么用了。 因此,Google 为我们提供了一个新的数据结构,LRU cache。 它的使用是这样的 LruCache bitmapCache = new LruCache<String, Bitmap>() 像是使用 Map ,但是它有一些独特的行为特性。 使用前,我们需要确定 cache 的大小。如何确定需要多大的空间? Google 给了我们一个最佳实践的空间计算方法。g ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); int availMemInBytes = am.getMemoryClass() * 1024 * 1024; LruCache bitmapCache = new LruCache<String, Bitmap>(availMemInBytes / 8); 另外还有一个重要的部分是我们需要告诉 cache 每个 bitmap 的大小,如何告诉?重写 sizeOf 方法 public class ThumbnailCache extends LruCache(String, Bitmap) { @Override protected int sizeOf(String key, Bitmap value) { return value....

June 8, 2015