美文网首页
LruCache图片内存缓存

LruCache图片内存缓存

作者: CarlosLynn | 来源:发表于2018-06-25 00:54 被阅读4次

LruCache图片内存缓存
1,概念
LruCache这个类位于android-support-v4包下,LRU即Least Recently Used,近期最少使用算法。也就是当内存缓存达到设定的最大值时将内存缓存中近期最少使用 的对象移除,有效的避免了OOM的出现。
什么是OOM:
OOM(out of memory)即内存泄露。一个程序中,已经不需要使用某个对象,但是因为仍然有引用指向它垃圾回收器就无法回收它,当该对象占用的内存无法被回收时,就容易造成内存泄露。
2,原理
讲到LruCache不得不提一下LinkedHashMap,因为LruCache中Lru算法的实现就是通过LinkedHashMap来实现的。LinkedHashMap继承于HashMap,它使用了一个双向链表来存储Map中的Entry顺序关系,这种顺序有两种,一种是LRU顺序,一种是插入顺序,这可以由其构造函数public LinkedHashMap(int initialCapacity,float loadFactor, boolean accessOrder)指定。所以,对于get、put、remove等操作,LinkedHashMap除了要做HashMap做的事情,还做些调整Entry顺序链表的工作。LruCache中将LinkedHashMap的顺序设置为LRU顺序来实现LRU缓存,每次调用get(也就是从内存缓存中取图片),则将该对象移到链表的尾端。调用put插入新的对象也是存储在链表尾端,这样当内存缓存达到设定的最大值时,将链表头部的对象(近期最少用到的)移除。
3,使用
以listview加载网络图片为例
1.1,在适配器的构造函数中进行初始化操作:通过构造函数LruCache<T, T>(int maxSize)创建对象,其中参数maxSize为指定的最大内存,也就是指定缓存的容量.通 常我们先获取系统分配给每个应用程序的最大内存,每个应用系统一般分配(32M),然后将其分配的1/8作为我们缓存的最大值(容量),
获取系统应用最大内存的方式
int maxMemory = (int) Runtime.getRuntime().maxMemory()
1.2,在创建LruCache对象的同时,重写int sizeOf(String key, Bitmap value){}来计算bitmap的大小,也就是衡量每张图片的大 小,此方法默认返回图片数量.
2,添加缓存
首次加载网络图片时候,调用put(K key, V value)将图片加入缓存中,其中图片url作为key,bitmap作为value.
3,获取缓存
当多次加载展示该图片的时候,我们首先从调用get(K key)方法从缓存中读取,读取结果不为null就直接展示使用,否则再次从网络请求数据.
4,移除缓存
假如内存中的资源需要移除的时候,我们可以调用remove(key)来进行移除缓存缓存的操作.

    5,清空缓存
        当我们需要释放内存的时候可以调用evictAll()方法,来做清楚缓存的操作.
    6,已经缓存的大小
        size()
    7,缓存容量
        maxSize()
    8,成功获取到缓存的次数
        hitCount()
    9,获取不到缓存次数
        missCount()
    10,创建缓存资源次数
        createCount()
    11,添加缓存次数
        .putCount()
    12,清除缓存次数
        evictionCount()
    13,重新设置缓存的容量
        resize(int maxSize)
        24576,49152,-->49152.
    14,删除缓存到指定容量以下.
        trimToSize(int maxSize)
        1121,-->449
image.png image.png

LruCacheDemo

相关文章

  • Android 缓存机制

    相册图片预取缓存策略是内存缓存(硬引用LruCache、软引用SoftReference)、外部文件缓存(cont...

  • 图片缓存/内存缓存/LruCache

    三级缓存 内存缓存 我们的缓存容量是有限的,它会面临一个问题:当有新的内容需要加入我们的缓存,但我们的缓存空闲的空...

  • LruCache图片内存缓存

    LruCache图片内存缓存1,概念LruCache这个类位于android-support-v4包下,LRU即L...

  • Android 图片三级缓存 _内存缓存LruCache

    本文目标 理解Android图片三级缓存机制,并重点理解内存缓存 (LruCache算法) 图片的缓存技术分为三级...

  • 最近最少使用算法 - LruCache

    简介 我们在做图片三级缓存时,内存缓存为了防止内存溢出,导致APP崩溃,使用LruCache来管理内存...

  • Glide缓存策略

    1.内存缓存 正在使用中的图片使用弱引用来进行缓存,不在使用中的图片使用LruCache来进行缓存 2.硬盘缓存 ...

  • 有关BitMap

    1.BitMap缓存机制:二级缓存 1) 内存缓存(LruCache): 能够快速获得最近显示的图片。LruCac...

  • LruCache源码分析

    在Android中常用的缓存策略是LruCache和DiskLruCache其中LruCache常被用作内存缓存。...

  • 图片缓存

    参考:内存缓存LruCache实现原理Android中图片的三级缓存策略Android官方教程:保存到文件andr...

  • Android图片缓存策略(二)-LruCache、DiskLr

    1 简介 目前比较常用的缓存策略是LruCache和DiskLruCache,其中LruCache常被用做内存缓存...

网友评论

      本文标题:LruCache图片内存缓存

      本文链接:https://www.haomeiwen.com/subject/ixleyftx.html