Android LruCache简单分析
来源:互联网 发布:安卓软件交易平台 编辑:程序博客网 时间:2024/06/05 02:42
在我们的移动设备中实现缓存是一个很重要的功能,今天我们了解一下内存缓存LruCache,LruCache是一个泛型类,提供了get和set方法来完成缓存的获取和添加操作,当缓存满时会移除近期使用最少的缓存对象(ps:lrucache只是把该对象从缓存中移出),然后再添加进新的缓存对象。它内部采用了一个LinkedHashMap以强引用的方式存储外界的缓存对象。这里区别一下强引用、软引用和弱引用:
强引用:直接的对象引用;
软引用:当一个对象只有软引用存在时,系统内存不足时此对象会被回收;
弱引用:当一个对象只有弱引用时,系统会随时回收此对象。
这里我们简单的实现一个图片缓存类:
publicclass ImageCache {
private LruCache<String,Bitmap>memoryCache;
private int maxMemory;
private int cacheSize;
public ImageCache(){
maxMemory= (int)(Runtime.getRuntime().maxMemory()/1024);
cacheSize=maxMemory/8;
memoryCache=new LruCache<String,Bitmap>(cacheSize){
@Override
protected int sizeOf(String key,Bitmap bitmap) {
returnbitmap.getRowBytes()*bitmap.getHeight()/1024;
}
};
}
/**
*
* @param key
* @param bitmap
*/
public void putBitmap(String key,Bitmapbitmap){
memoryCache.put(key,bitmap);
}
/**
*
* @param key
* @return
*/
public Bitmap getBitmap(String key){
if(null==memoryCache.get(key)){
return memoryCache.get(key);
}
return null;
}
/**
*
*@param key
*@return
*/
public Bitmapremove(String key){
return memoryCache.remove(key);
}
}
这里我们首先获取到当前进程的最大可用内存maxMemory,并将最大缓存容量cacheSize设置为最大可用内存的1/8,然后我们实例化LruCache时只需要指定缓存空间的大小并重写sizeOf方法,该方法是用来计算缓存对象的大小,这里的单位必须和总容量的单位一致。
LruCache的源码也比较的少:我们来一起看一下源码
首先是构造方法:
这里会将我们传入的缓存大小设置给maxSize并将this.map变量实例化,我们的缓存对象就是放置在该对象中。
我们再来看我们实例化LruCache对象时重写的sizeOf方法:
可以看出默认此方法返回的对象大小是1,显示如果我们不重写该方法是不行滴。
接下来我们可以看到put和get方法分别用于添加缓存对象和根据key来取缓存。
此外LruCache还提供了remove方法来根据key移除对应的缓存对象:
当然,LruCache源码中还有一些其它方法就不和大家一一的看了。大家可以自行看一下源码。
- Android LruCache简单分析
- Android LruCache类分析
- Android LruCache使用分析
- Android缓存-LruCache分析
- Android LruCache类分析
- android LRUCache源码分析
- Android LruCache 源码分析
- 【Android】LruCache简单用法示例
- Android SupportV4 LruCache源码分析
- 【Java源码分析】Android-LruCache源码分析
- android.util.LruCache主要代码分析
- Android中LruCache的源码分析
- Android LruCache 缓存 类 源码 注解 分析
- Android缓存源码分析(DiskLruCache,LruCache)
- Android之LruCache使用和源码分析
- Android LRUCache原理及源码分析(阿里巴巴)
- LruCache分析
- LruCache 分析
- C++中 引用&与取地址&的区别
- AsyncTask 源码分析
- 【线段树】HDU 5493 Queue (2015 ACM/ICPC Asia Regional Hefei Online)
- Linux,你了解多少!
- 如何准备BAT技术面试答案(中)——Java研发方向
- Android LruCache简单分析
- CentOS 6.5 下安装ettercap
- JVM中稳定与震荡的堆
- Debian 7 安装metasploit
- C#字符串格式化 ->string.Format
- 【Oracle 11g】我们的触发器竟然触发了两次!——诱因:sql重启动
- 14.http 304优化,了解客户端缓存
- 有关 由于moudle重复jar包导致签名打包失败的记录
- 动态加载 - 《Andorid必备技能》