編輯:關於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;
Reference reference = 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設計模式系列之工廠方法模式
工廠方法模式,往往是設計模式初學者入門的模式,的確,有人稱之為最為典型最具啟發效果的模式。android中用到了太多的工廠類,其中有用工廠方法模式的,當然也有很多工廠並不
2013年 移動App設計13項注意細節總結
導讀:在過去的一年裡,移動成主流也讓眾多的移動應用如雨後春筍般層出不窮,在眾多開發者從中獲利的同時競爭也愈演愈烈,如何才能保證自己立於不敗之地?用戶是上帝,一切還得從應用
ExoPlayer備忘錄
1.簡述與應用范圍ExpPlayer是一個開源的,App等級的媒體API,它的開源項目包含了library和示例。ExoPlayer相較於MediaPlaye
最新基於高德地圖的android進階開發(3)GPS地圖定位
1.下面示例是一個簡單的定位,來自官網,對這些源碼加了一些注釋,這樣看起來可能會更容易理解一點。2.直接上源碼androidManifest.xml