Android中的缓存策略
来源:互联网 发布:张议潮 知乎 编辑:程序博客网 时间:2024/05/29 13:49
今天给大家介绍一下Android中的缓存策略,说起缓存大家应该都有所听说,二级缓存,三级缓存之类的。缓存策略在Android中有着广泛的使用场景,尤其是图片加载这个场景下,缓存策略是非常重要的。为什么要这么说呢,Android设备大多是移动设备,多以使用数据流量为主,数据流量又是收费的,为了在应用的使用中并不过多的消耗用户的数据流量。使用缓存策略可以很好的缓解流量消耗的问题。
先来介绍一下今天要讲的缓存策略,有时又被大家称作三级缓存。那么有哪三级呢,给大家介绍一下流程:
当程序第一次从网络加载图片时,就将其缓存到存储设备的磁盘中,有时为了更好的用户体验,往往还会把图片在内存中缓存一份。这样,当程序再次想要请求图片时,它会先到内存中去获取,如果内存中没有就去存储设备的磁盘中去获取,如果存储设备中也没有的话,那就再从网络上进行下载。因为内存中加载图片要比在存储设备中加载图片快。所以这样不但提高了程序的效率也为用户节省了不必要的流量消耗。
通过上面的流程,大家应该知道三级缓存时哪三级了吧,分别是内存,存储设备磁盘,网络。一般来说在缓存策略中需要包括缓存的添加、获取和删除。因为不管是内存缓存还是设备缓存,它们的缓存大小总是有限制的,因为内存和SD卡等有着容量的限制,所以我们在容量快满时,需要删除一些旧的缓存对象,那么我们怎么知道我们应该删除哪些呢。我们使用到了一种缓存算法LRU (LeastRecentlyUsed),最近最少使用算法。它的核心思想是当缓存区容量满时,优先删除那么最近很少使用的缓存对象。
采用Lru算法的缓存有两种,一种是LruCache,用于实现内存的缓存;一种是DiskLruCache,实现存储设备磁盘的缓存。我们接下来按照缓存的创建、添加、删除和获取对它们进行一一介绍。
一、LruCache
LruCache是Android3.1所提供的一个缓存类,如果要在3.1之前使用的话需要使用support-v4兼容包。
LruCache是一个泛型类。它的内部采用的是一个LinkedHashMap以强引用的方式存储外界的缓存资源。其提供了get和put方法来完成缓存的获取和添加操作。当缓存满时,LruCache会移除较早使用的缓存对象,然后添加新的缓存对象进来。
先来介绍一下LruCache的创建过程:
//获得内存的总容量大小,单位KB int maxMemory= (int) (Runtime.getRuntime().maxMemory()/1024); //内存缓存区大小为内存总空间的1/8 int cacheSize=maxMemory/8; LruCache<String,Bitmap> mMemoryCache=new LruCache<String,Bitmap>(cacheSize){ //重写sizeOf返回Bitmap对象的大小 @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes()*bitmap.getHeight()/1024; } //entryRemoved方法在旧缓存被移除时被调用 @Override protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) { super.entryRemoved(evicted, key, oldValue, newValue); //可以在其中完成一些资源的回收 } };
上面的程序,只需要提供缓存的总容量大小和重写sizeOf方法即可,其他的详细信息请看上面代码注释。
除了LruCache的创建以外还有缓存的添加和获取,这也很简单。
从LruCache中获取一个缓存对象,代码如下:
mMemoryCache.get(key);
向LruCache中添加一个缓存对象,代码如下:
mMemoryCache.put(key,bitmap);
LruCache还可以通过remove方法删除一个指定的缓存对象,只需要指定key即可。
二、DiskLruCache
DiskLruCache用于实现存储设备磁盘上的缓存,他通过将缓存对象写入文件系统从而实现缓存的效果。
1.DiskLruCache的创建
DiskLruCache并不能通过构造方法来创建,它提供的open方法用于创建自身,如下:
- Android 中的缓存策略
- Android中的缓存策略
- Android中的缓存策略
- android中的缓存策略
- Android中的缓存策略--LruCache
- Android中的缓存策略--DiskLruCache
- Android中的缓存策略--DiskLruCache
- Android中的缓存策略--LruCache
- Android 开发中的网络下载策略 与 文件缓存策略
- Android 开发中的网络下载策略 与 文件缓存策略
- Android 开发中的网络下载策略 与 文件缓存策略
- ios中的缓存策略
- java中的缓存策略
- android缓存策略
- android 图片缓存策略
- android中缓存策略
- Android开发策略:缓存
- android图片缓存策略
- socket的write/send还是是否是线程安全?
- [最大流/Edmonds-karp算法]hiho1369 网络流一
- 【map函数】
- Android 调用系统播发器播放音乐或视频
- GitHub自学系列之二「加入 GitHub」
- Android中的缓存策略
- Bat面试算法
- 多线程下载
- 在一个图像数据上画圆点
- xListView
- tslib-1.4在TQ2440上的移植
- web开发中,applicationcontext文件问题(1)
- 用户画像----对于标签的快速匹配
- Android群英传神兵利器读书笔记——第一章:程序员小窝——搭建高效的开发环境