listview異步加載網(wǎng)絡(luò)圖片之雙緩存技術(shù)

listview異步加載網(wǎng)絡(luò)圖片之雙緩存技術(shù)

ID:25375025

大?。?3.18 KB

頁數(shù):3頁

時間:2018-11-19

listview異步加載網(wǎng)絡(luò)圖片之雙緩存技術(shù)_第1頁
listview異步加載網(wǎng)絡(luò)圖片之雙緩存技術(shù)_第2頁
listview異步加載網(wǎng)絡(luò)圖片之雙緩存技術(shù)_第3頁
資源描述:

《listview異步加載網(wǎng)絡(luò)圖片之雙緩存技術(shù)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、www.tsingyuan.cnListView異步加載網(wǎng)絡(luò)圖片之雙緩存技術(shù)問題描述:在這一篇博客中將會為大家講解如何將下載回來的圖片進(jìn)行緩存,為了節(jié)約流量,并且提高下一次顯示圖片的速度,提高用戶體驗(yàn),所以不能夠每次調(diào)用getView的時候都去從網(wǎng)絡(luò)下載圖片,就必須用到緩存。緩存的重點(diǎn)問題:如何控制緩存的大小,如果我們一直向緩存中篩數(shù)據(jù),而沒有對緩存的大小進(jìn)行控制,那么最終會導(dǎo)致OOM解決方案:設(shè)置兩級緩存,第一級用LinkedHashMap保留Bitmap的強(qiáng)引用,但是控制緩存的大小MAX_CAPACITY=10,當(dāng)繼續(xù)向該緩存中存數(shù)據(jù)的時候,將會把一級緩

2、存中的最近最少使用的元素放入二級緩存ConcurrentHashMap>,二級緩存中保留的Bitmap的軟引用。SoftReference:它保存的對象實(shí)例,除非JVM即將OutOfMemory,否則不會被GC回收。這個特性使得它特別適合設(shè)計對象Cache。對于Cache,我們希望被緩存的對象最好始終常駐內(nèi)存,但是如果JVM內(nèi)存吃緊,為了不發(fā)生OutOfMemoryError導(dǎo)致系統(tǒng)崩潰,必要的時候也允許JVM回收Cache的內(nèi)存,待后續(xù)合適的時機(jī)再把數(shù)據(jù)重新Load到Cache中。這樣可以系統(tǒng)設(shè)計得更具彈性。Java代碼收藏代碼

3、//0.75是加載因子為經(jīng)驗(yàn)值,true則表示按照最近訪問量的高低排序,false則表示按照插入順序排序privateHashMapmFirstLevelCache=newLinkedHashMap(MAX_CAPACITY/2,0.75f,true){privatestaticfinallongserialVersionUID=1L;protectedbooleanremoveEldestEntry(Entryeldest){if(size()>MAX_CAPACITY){//當(dāng)超過一級緩存閾值的

4、時候,將老的值從一級緩存搬到二級緩存mSecondLevelCache.put(eldest.getKey(),newSoftReference(eldest.getValue()));returntrue;}returnfalse;};};加載圖片:先讀緩存,緩存么有就開啟異步任務(wù)從網(wǎng)絡(luò)下載Java代碼收藏代碼/***加載圖片,如果緩存中有就直接從緩存中拿,緩存中沒有就下載*@paramurl*@paramadapter*@paramholder*/publicvoidloadImage(Stringurl,BaseAdapteradapter,ViewHolderho

5、lder){resetPurgeTimer();Bitmapbitmap=getBitmapFromCache(url);//從緩存中讀取if(bitmap==null){holder.mImageView.setImageResource(R.drawable.ic_launcher);//緩存沒有設(shè)為默認(rèn)圖片www.tsingyuan.cnImageLoadTaskimageLoadTask=newImageLoadTask();imageLoadTask.execute(url,adapter,holder);//執(zhí)行異步任務(wù)}else{holder.mImageView.setI

6、mageBitmap(bitmap);//設(shè)為緩存圖片}}讀取緩存的代碼:Java代碼收藏代碼publicBitmapgetBitmapFromCache(Stringurl){Bitmapbitmap=null;bitmap=getFromFirstLevelCache(url);//從一級緩存中拿if(bitmap!=null){returnbitmap;}bitmap=getFromSecondLevelCache(url);//從二級緩存中拿returnbitmap;}privateBitmapgetFromFirstLevelCache(Stringurl){Bitmapbit

7、map=null;synchronized(mFirstLevelCache){bitmap=mFirstLevelCache.get(url);if(bitmap!=null){//將最近訪問的元素放到鏈的頭部,提高下一次訪問該元素的檢索速度(LRU算法)mFirstLevelCache.remove(url);mFirstLevelCache.put(url,bitmap);}}returnbitmap;}privateBitm

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。