編輯:關於Android編程
前面的兩篇文章著重介紹的是磁盤緩存,這篇文章主要是講解一下內存緩存。對於內存緩存,也打算分兩篇文章來進行講解。在這一篇文章中,我們主要是關注三個類,
MemoryCache、BaseMemoryCache以及LimitedMemoryCache。
首先我們先看一下內存緩存的接口MemoryCache。
put(String key, Bitmap value); Bitmap get(String key); Bitmap remove(String key); Collectionkeys(); void clear();
接下來我們看實現內存緩存的接口的抽象類BaseMemoryCache。
與前面的文章一樣,還是先從變量入手。
/** Stores not strong references to objects */ private final Map> softMap = Collections.synchronizedMap(new HashMap >());
稍微的關注一下下面的方法
@Override public Bitmap get(String key) { Bitmap result = null; Referencereference = softMap.get(key); if (reference != null) { result = reference.get(); } return result; }
最後我們來看一下有限內存緩存空間的緩存類LimitedMemoryCache,從繼承關系上來看,它是對BaseMemoryCache的進一步擴展。
從變量上來看:
private static final int MAX_NORMAL_CACHE_SIZE_IN_MB = 16; private static final int MAX_NORMAL_CACHE_SIZE = MAX_NORMAL_CACHE_SIZE_IN_MB * 1024 * 1024; private final int sizeLimit; private final AtomicInteger cacheSize; private final ListhardCache = Collections.synchronizedList(new LinkedList ());
拿其中的對象的存儲的方法來分析一下:
public boolean put(String key, Bitmap value) { boolean putSuccessfully = false; // Try to add value to hard cache int valueSize = getSize(value); int sizeLimit = getSizeLimit(); int curCacheSize = cacheSize.get(); if (valueSize < sizeLimit) { while (curCacheSize + valueSize > sizeLimit) { Bitmap removedValue = removeNext(); if (hardCache.remove(removedValue)) { curCacheSize = cacheSize.addAndGet(-getSize(removedValue)); } } hardCache.add(value); cacheSize.addAndGet(valueSize); putSuccessfully = true; } // Add value to soft cache super.put(key, value); return putSuccessfully; }
Ok,關於圖片的內存緩存的第一篇先講到這裡,後面會繼續分析。希望對大家有所幫助哦~
工廠方法模式,往往是設計模式初學者入門的模式,的確,有人稱之為最為典型最具啟發效果的模式。android中用到了太多的工廠類,其中有用工廠方法模式的,當然也有很多工廠並不
導讀:在過去的一年裡,移動成主流也讓眾多的移動應用如雨後春筍般層出不窮,在眾多開發者從中獲利的同時競爭也愈演愈烈,如何才能保證自己立於不敗之地?用戶是上帝,一切還得從應用
1.簡述與應用范圍ExpPlayer是一個開源的,App等級的媒體API,它的開源項目包含了library和示例。ExoPlayer相較於MediaPlaye
1.下面示例是一個簡單的定位,來自官網,對這些源碼加了一些注釋,這樣看起來可能會更容易理解一點。2.直接上源碼androidManifest.xml