内存缓存采用LruCache类。
首先获取分配的内存大小:
private int getMemoryCacheSize(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
int memoryClass = am.getMemoryClass();
if (hasHoneycomb() && isLargeHeap(context)) {//是否设置了最大内存,注意API
memoryClass = getLargeMemoryClass(am);
}
return 1024 * 1024 * memoryClass / 8;//官方建议采用八分之一
}
然后封装LruCache类:
public class BitmapMemoryCache implements BitmapLruCache {
private int maxSize;
private LruCache<String, Bitmap> memoryCache;
public BitmapMemoryCache(int maxSize) {
this.maxSize = maxSize;
memoryCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
};
}
@Override
public void put(String key, Bitmap value) {
memoryCache.put(key, value);
}
@Override
public Bitmap get(String key) {
return memoryCache.get(key);
}
@Override
public void remove(String key) {
memoryCache.remove(key);
}
@Override
public void clear() {
memoryCache.evictAll();
}
@Override
public int getMaxSize() {
return maxSize;
}
@Override
public int getCurrentSize() {
return memoryCache.size();
}
@Override
public List<String> getAllKey() {
return new ArrayList<>(memoryCache.snapshot().keySet());
}
}
接口结构为:
public interface BitmapLruCache {
public void put(String key, Bitmap value);
public Bitmap get(String key);
public void remove(String key);
public List<String> getAllKey();
public void clear();
public int getMaxSize();
public int getCurrentSize();
}