圖片緩存之內存緩存技術LruCache

圖片緩存之內存緩存技術LruCache

ID:37770892

大小:26.22 KB

頁數:6頁

時間:2019-05-30

圖片緩存之內存緩存技術LruCache_第1頁
圖片緩存之內存緩存技術LruCache_第2頁
圖片緩存之內存緩存技術LruCache_第3頁
圖片緩存之內存緩存技術LruCache_第4頁
圖片緩存之內存緩存技術LruCache_第5頁
資源描述:

《圖片緩存之內存緩存技術LruCache》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。

1、圖片緩存之內存緩存技術LruCache,軟引用每當碰到一些大圖片的時候,我們如果不對圖片進行處理就會報OOM異常,這個問題曾經讓我覺得很煩惱,后來終于得到了解決,那么現在就讓我和大家一起分享一下吧。這篇博文要講的圖片緩存機制,我接觸到的有兩鐘,一種是軟引用,另一種是內存緩存技術。先來看下兩者的使用方式,再來作比較。除了加載圖片時要用到緩存處理,還有一個比較重要的步驟要做,就是要先壓縮圖片。1、壓縮圖片至于要壓縮到什么狀態(tài)就要看自己當時的處境了,壓縮圖片的時候既要達到一個小的值,又不能讓其模糊,更不能拉伸圖片。1./**2.????

2、????*加載內存卡圖片3.????????*/4.????????BitmapFactory.Optionsoptions?=?new?BitmapFactory.Options();5.????????options.inJustDecodeBounds?=?true;?//設置了此屬性一定要記得將值設置為false6.????????Bitmapbitmap?=?null;7.????????bitmap?=?BitmapFactory.decodeFile(url,?options);8.????????int?be?=?

3、(int)?((options.outHeight?>?options.outWidth???options.outHeight?/?1509.????????????????:?options.outWidth?/?200));10.????????if?(be?<=?0)?//判斷200是否超過原始圖片高度11.????????????be?=?1;?//如果超過,則不進行縮放12.????????options.inSampleSize?=?be;13.????????options.inPreferredConfig?=?

4、Bitmap.Config.ARGB_4444;14.????????options.inPurgeable?=?true;15.????????options.inInputShareable?=?true;16.????????options.inJustDecodeBounds?=?false;17.????????try?{18.????????????bitmap?=?BitmapFactory.decodeFile(url,?options);19.????????}?catch?(OutOfMemoryError?e

5、)?{20.????????????System.gc();21.????????????Log.e(TAG,?"OutOfMemoryError");22.????????}2、軟引用:只要有足夠的內存,就一直保持對象,直到發(fā)現內存吃緊且沒有StrongRef時才回收對象。我們可以這樣定義:map里面的鍵是用來放圖片地址的,既可以是網絡上的圖片地址,也可以SDcard上的圖片地址,map里面的值里面放的是持有軟引用的Bitmap,當然如果你要放Drawable,那也是可以的。1.private?Map

6、eference>?imageMap?=?new?HashMap>();接下來就讓我再介紹一下如何具體加載圖片:步驟:(1)先通過URL查看緩存中是否有圖片,如果有,則直接去緩存中取得。???????????如果沒有,就開線程重新去網上下載。??????(2)下載完了之后,就把圖片放在緩存里面,方便下次可以直接從緩存中取得。1.public?BitmaploadBitmap(final?String?imageUrl,final?ImageCallBack

7、imageCallBack)?{2.????????SoftReference?reference?=?imageMap.get(imageUrl);3.????????if(reference?!=?null)?{4.????????????if(reference.get()?!=?null)?{5.????????????????return?reference.get();6.????????????}7.????????}8.????????final?Handler?handler?=?new?Hand

8、ler()?{9.????????????public?void?handleMessage(final?android.os.Messagemsg)?{10.????????????????//加入到緩存中11.????????????????B

當前文檔最多預覽五頁,下載文檔查看全文

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

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