Android提供的LruCache类简介
生活随笔
收集整理的這篇文章主要介紹了
Android提供的LruCache类简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分類: Android開發 2013-02-06 15:26 26733人閱讀 評論(10) 收藏 舉報 package?android.util; ? import import /**? ?*?A?cache?that?holds?strong?references?to?a?limited?number?of?values.?Each?time? ?*?a?value?is?accessed,?it?is?moved?to?the?head?of?a?queue.?When?a?value?is? ?*?added?to?a?full?cache,?the?value?at?the?end?of?that?queue?is?evicted?and?may? ?*?become?eligible?for?garbage?collection.? ?*?Cache保存一個強引用來限制內容數量,每當Item被訪問的時候,此Item就會移動到隊列的頭部。 ?*?<p>If?your?cached?values?hold?resources?that?need?to?be?explicitly?released,? ?*?override?{@link?#entryRemoved}.? ?*?如果你cache的某個值需要明確釋放,重寫entryRemoved() ?*?<p>If?a?cache?miss?should?be?computed?on?demand?for?the?corresponding?keys,? ?*?override?{@link?#create}.?This?simplifies?the?calling?code,?allowing?it?to? ?*?assume?a?value?will?always?be?returned,?even?when?there's?a?cache?miss.? ?*?如果key相對應的item丟掉啦,重寫create().這簡化了調用代碼,即使丟失了也總會返回。 ?*?<p>By?default,?the?cache?size?is?measured?in?the?number?of?entries.?Override? ?*?{@link?#sizeOf}?to?size?the?cache?in?different?units.?For?example,?this?cache? ?*?is?limited?to?4MiB?of?bitmaps:?默認cache大小是測量的item的數量,重寫sizeof計算不同item的 ?*?<pre>???{@code? ?*???int?cacheSize?=?4?*?1024?*?1024;?//?4MiB? ?*???LruCache<String,?Bitmap>?bitmapCache?=?new?LruCache<String,?Bitmap>(cacheSize)?{? ?*???????protected?int?sizeOf(String?key,?Bitmap?value)?{? ?*???????????return?value.getByteCount();? ?*???????}? ?*???}}</pre>? ?*? ?*?<p>This?class?is?thread-safe.?Perform?multiple?cache?operations?atomically?by? ?*?synchronizing?on?the?cache:?<pre>???{@code? ?*???synchronized?(cache)?{? ?*?????if?(cache.get(key)?==?null)?{? ?*?????????cache.put(key,?value);? ?*?????}? ?*???}}</pre>? ?*? ?*?<p>This?class?does?not?allow?null?to?be?used?as?a?key?or?value.?A?return? ?*?value?of?null?from?{@link?#get},?{@link?#put}?or?{@link?#remove}?is? ?*?unambiguous:?the?key?was?not?in?the?cache. ?*/ publicclass privatefinal ?? privateint?size; //已經存儲的大小 privateint?maxSize; //規定的最大存儲空間 privateint?putCount; ?//put的次數 privateint?createCount; ?//create的次數 privateint?evictionCount; ?//回收的次數 privateint?hitCount; ?//命中的次數 privateint?missCount; ?//丟失的次數 ?????*?@param?maxSize?for?caches?that?do?not?override?{@link?#sizeOf},?this?is? ?????*?????the?maximum?number?of?entries?in?the?cache.?For?all?other?caches,? ?????*?????this?is?the?maximum?sum?of?the?sizes?of?the?entries?in?this?cache.? ?????*/ publicint if)?{?? thrownew this thisnew,?.75f,?true ?????*?Returns?the?value?for?{@code?key}?if?it?exists?in?the?cache?or?can?be? ?????*?created?by?{@code?#create}.?If?a?value?was?returned,?it?is?moved?to?the? ?????*?head?of?the?queue.?This?returns?null?if?a?value?is?not?cached?and?cannot? ?????*?be?created.?通過key返回相應的item,或者創建返回相應的item。相應的item會移動到隊列的頭部, ?????*/ publicfinal ifnull thrownew synchronizedthis ifnull return ?????????*?Attempt?to?create?a?value.?This?may?take?a?long?time,?and?the?map? ?????????*?may?be?different?when?create()?returns.?If?a?conflicting?value?was? ?????????*?added?to?the?map?while?create()?was?working,?we?leave?that?value?in? ?????????*?the?map?and?release?the?created?value.? ?????????* 如果丟失了就試圖創建一個item ? ? ? ? ?*/ ifnull returnnull synchronizedthis ifnull ?? ? ? ? ? ? ? ? ? //如果前面存在oldValue,那么撤銷put()? else ifnull false return else return ?????*?Caches?{@code?value}?for?{@code?key}.?The?value?is?moved?to?the?head?of? ?????*?the?queue.? ?????*? ?????*?@return?the?previous?value?mapped?by?{@code?key}.? ?????*/ publicfinal ifnullnull thrownew synchronizedthis ifnull)?{ ?//返回的先前的value值 ifnull false return ?????*?@param?maxSize?the?maximum?size?of?the?cache?before?returning.?May?be?-1? ?????*?????to?evict?even?0-sized?elements.? ?????*/ privatevoidint whiletrue synchronizedthis if?||?(map.isEmpty()?&&?size?!=?))?{?? thrownew if break ifnull break truenull ?????*?Removes?the?entry?for?{@code?key}?if?it?exists.? ?????*?刪除key相應的cache項,返回相應的value ?????*?@return?the?previous?value?mapped?by?{@code?key}.? ?????*/ publicfinal ifnull thrownew synchronizedthis ifnull ifnull falsenull return ?????*?Called?for?entries?that?have?been?evicted?or?removed.?This?method?is? ?????*?invoked?when?a?value?is?evicted?to?make?space,?removed?by?a?call?to? ?????*?{@link?#remove},?or?replaced?by?a?call?to?{@link?#put}.?The?default? ?????*?implementation?does?nothing.? ?????*?當item被回收或者刪掉時調用。改方法當value被回收釋放存儲空間時被remove調用, ?????*?<p>The?method?is?called?without?synchronization:?other?threads?may? ?????*?access?the?cache?while?this?method?is?executing.? ?????*? ?????*?@param?evicted?true?if?the?entry?is?being?removed?to?make?space,?false? ?????*?????if?the?removal?was?caused?by?a?{@link?#put}?or?{@link?#remove}.? ?????*?@param?newValue?the?new?value?for?{@code?key},?if?it?exists.?If?non-null,? ?????*?????this?removal?was?caused?by?a?{@link?#put}.?Otherwise?it?was?caused?by? ?????*?????an?eviction?or?a?{@link?#remove}.? ?????*/ protectedvoidboolean ?????*?Called?after?a?cache?miss?to?compute?a?value?for?the?corresponding?key.? ?????*?Returns?the?computed?value?or?null?if?no?value?can?be?computed.?The? ?????*?default?implementation?returns?null.? ?????*?當某Item丟失時會調用到,返回計算的相應的value或者null ?????*?<p>The?method?is?called?without?synchronization:?other?threads?may? ?????*?access?the?cache?while?this?method?is?executing.? ?????*? ?????*?<p>If?a?value?for?{@code?key}?exists?in?the?cache?when?this?method? ?????*?returns,?the?created?value?will?be?released?with?{@link?#entryRemoved}? ?????*?and?discarded.?This?can?occur?when?multiple?threads?request?the?same?key? ?????*?at?the?same?time?(causing?multiple?values?to?be?created),?or?when?one? ?????*?thread?calls?{@link?#put}?while?another?is?creating?a?value?for?the?same? ?????*?key.? ?????*/ protected returnnull privateint int if)?{?? thrownew?+?value);?? return ?????*?Returns?the?size?of?the?entry?for?{@code?key}?and?{@code?value}?in? ?????*?user-defined?units.??The?default?implementation?returns?1?so?that?size? ?????*?is?the?number?of?entries?and?max?size?is?the?maximum?number?of?entries.? ?????*?返回用戶定義的item的大小,默認返回1代表item的數量,最大size就是最大item值 ?????*?<p>An?entry's?size?must?not?change?while?it?is?in?the?cache.? ?????*/ protectedint return;?? ?????*?Clear?the?cache,?calling?{@link?#entryRemoved}?on?each?removed?entry.? ?????*/ publicfinalvoid );??? ?????*?For?caches?that?do?not?override?{@link?#sizeOf},?this?returns?the?number? ?????*?of?entries?in?the?cache.?For?all?other?caches,?this?returns?the?sum?of? ?????*?the?sizes?of?the?entries?in?this?cache.? ?????*/ publicsynchronizedfinalint return ?????*?For?caches?that?do?not?override?{@link?#sizeOf},?this?returns?the?maximum? ?????*?number?of?entries?in?the?cache.?For?all?other?caches,?this?returns?the? ?????*?maximum?sum?of?the?sizes?of?the?entries?in?this?cache.? ?????*/ publicsynchronizedfinalint return ?????*?Returns?the?number?of?times?{@link?#get}?returned?a?value?that?was? ?????*?already?present?in?the?cache.? ?????*/ publicsynchronizedfinalint return ?????*?Returns?the?number?of?times?{@link?#get}?returned?null?or?required?a?new? ?????*?value?to?be?created.? ?????*/ publicsynchronizedfinalint return ?????*?Returns?the?number?of?times?{@link?#create(Object)}?returned?a?value.? ?????*/ publicsynchronizedfinalint return ?????*?Returns?the?number?of?times?{@link?#put}?was?called.? ?????*/ publicsynchronizedfinalint return ?????*?Returns?the?number?of?values?that?have?been?evicted.? ?????*/ publicsynchronizedfinalint return ?????*?Returns?a?copy?of?the?current?contents?of?the?cache,?ordered?from?least? ?????*?recently?accessed?to?most?recently?accessed.?返回當前cache的副本,從最近最少訪問到最多訪問 ?????*/ publicsynchronizedfinal returnnew ?publicsynchronizedfinal int int???(?*?hitCount?/?accesses)?:?;?? return,?? }?
轉載于:https://www.cnblogs.com/xgjblog/p/4064806.html
總結
以上是生活随笔為你收集整理的Android提供的LruCache类简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 小知识点
- 下一篇: Uva10294 Arif in Dha