美文网首页
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

    相关文章

      网友评论

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

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