Bitmap 메모리 캐시 프레임워크 (2)

메모리가 제한되어 메모리를 가장 많이 차지하는bimap 프로젝트를 우선적으로 정리합니다. LargestLimitedMemoryCache
/**
 * @  :        ,         bitmap       
 * @filename:LargestLimitedMemoryCache.java
 * @author:gac
 * @time:2018/6/29 11:19
 */
public class LargestLimitedMemoryCache extends LimitedMemoryCache{
    //     bitmap  ,                    bitmap
    private final Map valueSizes = Collections.synchronizedMap(new HashMap());
    public LargestLimitedMemoryCache(int sizeLimit) {
        super(sizeLimit);
    }

    @Override
    public boolean put(String key, Bitmap value) {
        if(super.put(key,value)){//super.put              ,  removeNext       
            valueSizes.put(value,getSize(value));//  bitmap    bitmap   
            return true;
        }
        return false;
    }

    @Override
    public Bitmap remove(String key) {
        Bitmap value =super.get(key);
        if(value != null){
            valueSizes.remove(value);
        }

        return super.remove(key);
    }

    @Override
    public void clear() {
        valueSizes.clear();
        super.clear();
    }

    @Override
    protected Reference createReference(Bitmap value) {
        return new WeakReference(value);
    }

    @Override
    protected int getSize(Bitmap value) {
        return value.getRowBytes()*value.getHeight();
    }

    @Override
    protected Bitmap removeNext() {
        Integer maxSize = null;//  bimap  
        Bitmap largestValue = null;//  bitmap    
        Set> entries = valueSizes.entrySet();
        //  valueSizes                        
        synchronized (valueSizes){
            for(Map.Entry entry : entries){
                if(largestValue == null){//           
                    largestValue = entry.getKey();
                    maxSize = entry.getValue();
                }else{
                    Integer size = entry.getValue();//        
                    if(size > maxSize){//                    
                        maxSize = size;
                        largestValue = entry.getKey();
                    }
                }
            }
        }
        valueSizes.remove(largestValue);
        return largestValue;
    }
}

메모리가 제한에 도달하면 최신 데이터를 우선적으로 정리하고bitmap의 강력한 인용FIFOLimitedMemoryCache를 대기열에 저장합니다
/**
 * @  :          ,    bitmap          
 * @filename:FIFOLimitedMemoryCache.java
 * @author:gac
 * @time:2018/6/29 13:30
 */
public class FIFOLimitedMemoryCache extends LimitedMemoryCache {
    //    bitmap                     
    private final List queue = Collections.synchronizedList(new LinkedList());

    public FIFOLimitedMemoryCache(int sizeLimit) {
        super(sizeLimit);
    }

    /**
     *     
     * @param key
     * @param value
     * @return
     */
    @Override
    public boolean put(String key, Bitmap value) {
        if(super.put(key,value)){
            queue.add(value);
            return true;
        }
        return false;
    }

    /**
     *     
     * @param key
     * @return
     */
    @Override
    public Bitmap remove(String key) {
        Bitmap value = super.get(key);
        if(value != null){
            queue.remove(value);
        }
        return super.remove(key);
    }

    @Override
    public void clear() {
        queue.clear();
        super.clear();
    }


    @Override
    protected Reference createReference(Bitmap value) {
        return new WeakReference(value);
    }

    @Override
    protected int getSize(Bitmap value) {
        return value.getRowBytes()*value.getHeight();
    }

    @Override
    protected Bitmap removeNext() {//     ,softMap             
        return queue.remove(0);
    }
}

좋은 웹페이지 즐겨찾기