Android記憶體快取之LruCache
阿新 • • 發佈:2018-11-14
LruCache是什麼?
LruCache 是least recentlly used 的簡稱,意思是最近最少使用演算法,它可以實現將最近最少使用的物件回收掉,從而保證記憶體不會超出範圍可將LruCache當成一個容器,它就相當於一個map集合。
為什麼使用LruCache來管理記憶體?
因為從Android 2.3以後,垃圾回收機制會更傾向於回收持有軟引用和弱引用的物件,也就是說可能在記憶體充足的情況下也會回收軟引用或弱引用,這樣就是失去了記憶體快取的意義,而這個時候就可以使用LruCache來管理記憶體 , LruCache就是一個解決記憶體溢位的類,它能夠自己控制記憶體大小,從而避免記憶體溢位。
怎麼使用LruCache來進行記憶體快取的管理?
package com.casic.bitmaputils.utils; import android.graphics.Bitmap; import android.util.Log; import android.util.LruCache; /** * @author 郭寶 * @project: BitmapUtils * @package: com.casic.bitmaputils.utils * @date: 2018/10/28 0028 13:11 * @brief: 記憶體快取(利用軟引用加以優化) */ public class MemoryCacheImagesUtil { private static final String TAG = "MemoryCacheImagesUtil"; //二級優化 private LruCache<String,Bitmap> mLruCache ; //二級優化 public MemoryCacheImagesUtil(){ //獲取Android系統給App分配的執行記憶體, 返回的資料以B為單位 long maxMemory = Runtime.getRuntime().maxMemory(); Log.i(TAG,"maxMemory:"+maxMemory); //maxMemory:402653184 mLruCache = new LruCache<String,Bitmap>((int) (maxMemory/8)){ @Override protected int sizeOf(String key, Bitmap value) { //獲取每張圖片的總位元組大小 int byteCount = value.getByteCount(); return byteCount; } }; } /** * 設定記憶體快取 * 設定記憶體快取時首先需要在網路下載成功以後設定下,然後在獲取本地快取時設定下 * @param url * @param bitmap */ public void setMemoryCache(String url,Bitmap bitmap){ //二級優化 mLruCache.put(url,bitmap); } /** * 根據url獲取記憶體快取中的bitmap物件 * @param url * @return */ public Bitmap getMemoryCache(String url){ /* * 二級優化 * */ return mLruCache.get(url); } }