Android開源架構Universal-Image-Loader學習四——LimitedMemoryCache的一些子集,androidloader

來源:互聯網
上載者:User

Android開源架構Universal-Image-Loader學習四——LimitedMemoryCache的一些子集,androidloader

LRULimitedMemoryCache源碼:

/** * (cache size limited)Size of all stored bitmaps will not to exceed size limit. * (刪除策略LRU)When cache reaches limit size then the least recently used bitmap is deleted from cache. * NOTE: This cache uses strong and weak references for stored Bitmaps.  * 限定值內的使用強引用 */public class LRULimitedMemoryCache extends LimitedMemoryCache {     private static final int INITIAL_CAPACITY = 10;    private static final float LOAD_FACTOR = 1.1f;     /** LRU */    private final Map<String, Bitmap> lruCache = Collections.synchronizedMap(new LinkedHashMap<String, Bitmap>(INITIAL_CAPACITY, LOAD_FACTOR, true));     /**建構函式 */    public LRULimitedMemoryCache(int maxSize) {        super(maxSize);    }     @Override    public boolean put(String key, Bitmap value) {        if (super.put(key, value)) {            lruCache.put(key, value);            return true;        } else {            return false;        }    }     @Override    public Bitmap get(String key) {        lruCache.get(key); // call "get" for LRU logic        return super.get(key);    }     @Override    public Bitmap remove(String key) {        lruCache.remove(key);        return super.remove(key);    }     @Override    public void clear() {        lruCache.clear();        super.clear();    }     @Override    protected int getSize(Bitmap value) {        return value.getRowBytes() * value.getHeight();    }     @Override    protected Bitmap removeNext() {        Bitmap mostLongUsedValue = null;        synchronized (lruCache) {            Iterator<Entry<String, Bitmap>> it = lruCache.entrySet().iterator();            if (it.hasNext()) {                Entry<String, Bitmap> entry = it.next();                mostLongUsedValue = entry.getValue();                it.remove();            }        }        return mostLongUsedValue;    }     @Override    protected Reference<Bitmap> createReference(Bitmap value) {        return new WeakReference<Bitmap>(value);    }}

FIFOLimitedMemoryCache源碼:

/** * Limited {@link Bitmap bitmap} cache. Provides {@link Bitmap bitmaps} storing. Size of all stored bitmaps will not to * exceed size limit.  * 刪除策略:FIFO * NOTE:This cache uses strong and weak references for stored Bitmaps. Strong references - for limited count of * Bitmaps (depends on cache size), weak references - for all other cached Bitmaps. */public class FIFOLimitedMemoryCache extends LimitedMemoryCache {     private final List<Bitmap> queue = Collections.synchronizedList(new LinkedList<Bitmap>());     public FIFOLimitedMemoryCache(int sizeLimit) {        super(sizeLimit);    }     @Override    public boolean put(String key, Bitmap value) {        if (super.put(key, value)) {            queue.add(value);            return true;        } else {            return false;        }    }     @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 int getSize(Bitmap value) {        return value.getRowBytes() * value.getHeight();    }     @Override    /*刪除策略:刪除頭結點,即FIFO*/    protected Bitmap removeNext() {        return queue.remove(0);    }     @Override    protected Reference<Bitmap> createReference(Bitmap value) {        return new WeakReference<Bitmap>(value);    }}


LargestLimitedMemoryCache源碼:
/** * Limited {@link Bitmap bitmap} cache. Provides {@link Bitmap bitmaps} storing. Size of all stored bitmaps will not to * exceed size limit.  * 刪除策略: 刪除size最大的bitmap * NOTE:This cache uses strong and weak references for stored Bitmaps. Strong references - for limited count of * Bitmaps (depends on cache size), weak references - for all other cached Bitmaps */public class LargestLimitedMemoryCache extends LimitedMemoryCache {       private final Map<Bitmap, Integer> valueSizes = Collections.synchronizedMap(new HashMap<Bitmap, Integer>());     public LargestLimitedMemoryCache(int sizeLimit) {        super(sizeLimit);    }     @Override    public boolean put(String key, Bitmap value) {        if (super.put(key, value)) {            valueSizes.put(value, getSize(value));            return true;        } else {            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 int getSize(Bitmap value) {        return value.getRowBytes() * value.getHeight();    }     @Override    /*刪除策略:遍曆map尋找最大值*/    protected Bitmap removeNext() {        Integer maxSize = null;        Bitmap largestValue = null;        Set<Entry<Bitmap, Integer>> entries = valueSizes.entrySet();        synchronized (valueSizes) {            for (Entry<Bitmap, Integer> 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;    }     @Override    protected Reference<Bitmap> createReference(Bitmap value) {        return new WeakReference<Bitmap>(value);    }}









聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.