版权声明:1.版权归原作者Moment ° 回忆 ✨所有; 2.未经原作者允许不得转载本文内容,否则将视为侵权; 3.转载或者引用本文内容请注明来源及原作者; 4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。 https://blog.csdn.net/qq_35366269/article/details/83717405
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);
}
}