import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.Build;
import android.support.v4.util.LruCache;
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
public class ImageCache {
private static final int MAX_SIZE = 5*1024*1024;
private static ImageCache cache = new ImageCache();
public static ImageCache getInstance(){
return cache;
}
//强引用
private LruCache<Object, Bitmap> lruCache;//圖片緩存,设置的value必须能计算出所占有内存大小
private ImageCache(){
lruCache = new LruCache<Object, Bitmap>(MAX_SIZE){
@Override
protected void entryRemoved(boolean evicted, Object key,
Bitmap oldValue, Bitmap newValue) {
//evicted:为true的时候表示大小超出
super.entryRemoved(evicted, key, oldValue, newValue);
}
@Override
protected int sizeOf(Object key, Bitmap value) {
return getSize(value);
}
};
}
/**
* 计算图片大小
* @param bitmap
* @return 图片大小
*/
private int getSize(Bitmap bitmap){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1){
return bitmap.getByteCount();
}
return bitmap.getRowBytes() * bitmap.getHeight();
}
public void put(Object key,Bitmap value){
//如果添加的内存超过了预先设置的大小,就会移除一部分
lruCache.put(key, value);
}
public Bitmap get(Object key){
return lruCache.get(key);
}
}
ImageCache 图片缓存强引用
最新推荐文章于 2025-03-30 20:39:35 发布