Android LruCache(内存缓存)
来源:互联网 发布:上海争游网络首页 编辑:程序博客网 时间:2024/06/05 11:28
Android LruCache(内存缓存)
LruCache(Android的内存缓存)
1.概念
内存缓存相对于磁盘缓存而言,速度要来的快很多,但缺点容量较小且会被系统回收,这里的实现我用到了LruCache。
LruCache这个类是Android3.1版本中提供的,如果你是在更早的Android版本中开发,则需要导入android-support-v4的jar包
Lru: 是Least Recently Used 的简称 ,近期最少使用的
原理:把近期最少使用的数据从缓存中移除,保留使用最频繁的数据
LruCache是基于Lru算法实现的一种缓存机制
Lru算法的原理是所近期最少使用的数据给移除掉,当然前提是当前数据量大于设定的最大值
LruCache没有真正释放内存,只是从Map中移除数据,真正释放内存还是要用户手动释放
底部使用的是LinkedHashMap<k,p>(需要排序)
LruCache的关键字段有 总容量 已使用容量 linkedHashMap
//核心数据结构
private final LinkedHashMap map;
// 当前缓存数据所占的大小
private int size;
//缓存空间总容量
private int maxSize;
需要注意的是size字段,因为map中可以存放各种类型的数据,这些数据的大小测量方式也是不一样的,需要自己定义数据的测量方式
2.关键代码如下
1.初使化,需要指定缓存区空间的大小
/**
* 图片缓存技术的核心类,用于缓存所有下载好的图片,在程序内存达到设定值时会将最近最少使用的图片移除掉
* String用于存放图片的url地址
* Bitmap代表图片
*/
private LruCache<String,Bitmap> mMemoryCache;
//获取应用程序最大可用内存
int maxMemory=(int)Runtime.getRuntime().maxMemory();
//设置图片缓存大小为程序最大可用内存的1/8
int cacheSize=maxMemory/8;
//初使化内存缓存操作,需要给定缓存区空间大小
mMemoryCache=new LruCache<String, Bitmap>(cacheSize){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();//自定义bitmap数据大小的计算方式
}
};
2.存入图片
//imgurl代表图片的url地址,因为url路径里面可能存在一些特殊字符,所以可以使用md5加密的方式返回一个字符串,md5加密后都是0~f之间的字符
mMemoryCache.put(encode(imgurl),bitmap);
/**
* 把一个字符串以md5的放肆加密之后返回...因为url路径里面可能存在一些不可用的特殊字符,所以使用这种方式处理一下
* @param string
* @return
* @throws Exception
*/
private String encode(String string) throws Exception {
byte[] hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10) {
hex.append("0");
}
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
}
3.获取图片
Bitmap map=mMemoryCache.get(encode(imgurl));
阅读全文
1 0
- Android内存缓存LruCache
- Android 内存缓存 LruCache
- Android LruCache(内存缓存)
- Android LruCache(内存缓存)
- Android 缓存(1)---内存缓存LruCache
- android 提供的内存缓存LruCache.java
- android LruCache内存缓存源码解析
- Android LruCache内存缓存实现详解
- Android LruCache内存缓存实现详解
- Android内存缓存LruCache源码解析
- Android缓存机制Lrucache内存缓存和DiskLruCache磁盘缓存
- 内存缓存技术LruCache
- 内存缓存与LruCache
- 内存缓存LruCache算法
- 内存缓存LruCache详解
- 内存缓存和LruCache
- 内存缓存LruCache详解
- android LruCache的使用 (本地缓存+内存缓存)
- Android DiskLruCache(磁盘缓存)
- 闭包的学习例子
- 编译ESP8266固件说明
- 运行循环和自动释放池关系
- cas shiro spring实现单点登录
- Android LruCache(内存缓存)
- 远程登录 Windows 上 Mysql 配置
- Android studio如何添加HttClient
- IOS 之iIOS11更新 导航返回按钮偏移的问题。。。。。
- 重建二叉树 (剑指Offer 第 4 题)
- SD卡文件权限
- SVN和MyEclipse集成
- 计算机网络知识点总结1:可靠数据传输原理
- MATLAB 元胞数组