MemoryCache

MemoryCache.java
Bitmap 內(nèi)存緩存接口爱葵,需要實(shí)現(xiàn)的接口包括 get(…)反浓、put(…)、remove(…)浓瞪、clear()巧婶、keys()

BaseMemoryCache.java
實(shí)現(xiàn)了MemoryCache主要函數(shù)的抽象類,以 Map> softMap 做為緩存池英岭,利于虛擬機(jī)在內(nèi)存不足時回收緩存對象诅妹。提供抽象函數(shù):createReference毅人,表示根據(jù) Bitmap 創(chuàng)建一個 Reference 做為緩存對象。Reference 可以是 WeakReference划煮、SoftReference 等

WeakMemoryCache.java
以WeakReference<Bitmap>做為緩存 value 的內(nèi)存緩存缔俄,實(shí)現(xiàn)了BaseMemoryCache。
實(shí)現(xiàn)了BaseMemoryCache的createReference(Bitmap value)函數(shù)蟹略,直接返回一個new WeakReference<Bitmap>(value)做為緩存 value挖炬。

LimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存贼急,繼承自BaseMemoryCache的抽象類捏萍。
會在 put(…) 函數(shù)中判斷總體大小是否超出了上限令杈,是則循環(huán)刪除緩存對象直到小于上限碴倾,刪除順序由抽象函數(shù)removeNext決定

LargestLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除 size 最大的元素异雁,繼承自LimitedMemoryCache纲刀。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù)担平,總是返回當(dāng)前緩存中 size 最大的元素

UsingFreqLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除使用次數(shù)最少的元素面褐,繼承自LimitedMemoryCache取胎。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù)闻蛀,總是返回當(dāng)前緩存中使用次數(shù)最少的元素

LRULimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除最近最少使用的元素析恢,繼承自LimitedMemoryCache秧饮。
通過new LinkedHashMap<String, Bitmap>(10, 1.1f, true)作為緩存池盗尸。LinkedHashMap 第三個參數(shù)表示是否需要根據(jù)訪問順序(accessOrder)排序帽撑,true 表示根據(jù)accessOrder排序,最近訪問的跟最新加入的一樣放到最后面扣蜻,false 表示根據(jù)插入順序排序。這里為 true 且緩存滿時始終刪除第一個元素莽使,即始終刪除最近最少訪問的元素芳肌。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù),總是返回第一個元素翎迁,即最近最少使用的元素

FIFOLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存净薛,會在緩存滿時優(yōu)先刪除先進(jìn)入緩存的元素,繼承自LimitedMemoryCache痴腌。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù)爆班,總是返回最先進(jìn)入緩存的元素

LruMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除最近最少使用的元素戚嗅,實(shí)現(xiàn)了MemoryCache懦胞。這個也是使用的lru算法凉泄,和LRULimitedMemoryCache不同的是,LRULimitedMemoryCache緩存的是bitmap的弱引用)胀糜。
以new LinkedHashMap<String, Bitmap>(0, 0.75f, true)作為緩存池蒂誉。LinkedHashMap 第三個參數(shù)表示是否需要根據(jù)訪問順序(accessOrder)排序,true 表示根據(jù)accessOrder排序括堤,最近訪問的跟最新加入的一樣放到最后面,false 表示根據(jù)插入順序排序讥电。這里為 true 且緩存滿時始終刪除第一個元素轧抗,即始終刪除最近最少訪問的元素。
在put(…)函數(shù)中通過trimToSize(int maxSize)函數(shù)判斷總體大小是否超出了上限潮剪,是則刪除第緩存池中第一個元素分唾,即最近最少使用的元素,直到總體大小小于上限弧蝇。
LruMemoryCache功能上與LRULimitedMemoryCache類似折砸,不過在實(shí)現(xiàn)上更加優(yōu)雅。用簡單的實(shí)現(xiàn)接口方式两芳,而不是不斷繼承的方式去枷。

LimitedAgeMemoryCache.java
限制了對象最長存活周期的內(nèi)存緩存删顶。
MemoryCache的裝飾者,相當(dāng)于為MemoryCache添加了一個特性特咆。以一個MemoryCache內(nèi)存緩存和一個 maxAge 做為構(gòu)造函數(shù)入?yún)⒙剂弧T?get(…) 時判斷如果對象存活時間已經(jīng)超過設(shè)置的最長時間,則刪除荒叶。

FuzzyKeyMemoryCache.java
可以將某些原本不同的 key 看做相等输虱,在 put 時刪除這些相等的 key宪睹。
MemoryCache的裝飾者,相當(dāng)于為MemoryCache添加了一個特性亭病。以一個MemoryCache內(nèi)存緩存和一個 keyComparator 做為構(gòu)造函數(shù)入?yún)⒆锾T?put(…) 時判斷如果 key 與緩存中已有 key 經(jīng)過Comparator比較后相等,則刪除之前的元素菠齿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坐昙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疾棵,更是在濱河造成了極大的恐慌痹仙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拟枚,死亡現(xiàn)場離奇詭異抖所,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)暴匠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門傻粘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窒典,你說我怎么就攤上這事瀑志。” “怎么了劈猪?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵战得,是天一觀的道長。 經(jīng)常有香客問我浇冰,道長聋亡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任井厌,我火速辦了婚禮致讥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘墓拜。我一直安慰自己请契,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布涌韩。 她就那樣靜靜地躺著臣樱,像睡著了一般腮考。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踩蔚,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天馅闽,我揣著相機(jī)與錄音馍迄,去河邊找鬼柬姚。 笑死庄涡,一個胖子當(dāng)著我的面吹牛搬设,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泣洞,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼默色,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呕诉?” 一聲冷哼從身側(cè)響起吃度,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伊者,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亦渗,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡法精,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年亿虽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡收毫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出此再,到底是詐尸還是另有隱情,我是刑警寧澤摘符,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布逛裤,位于F島的核電站,受9級特大地震影響带族,放射性物質(zhì)發(fā)生泄漏蟀给。R本人自食惡果不足惜跋理,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祠饺。 院中可真熱鬧汁政,春花似錦、人聲如沸勺鸦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至誓禁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辫继,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工遣耍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炮车,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓棋傍,卻偏偏與公主長得像难审,于是被迫代替她去往敵國和親告喊。 傳聞我的和親對象是個殘疾皇子派昧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容