Android内存缓存之LruCache

版权声明:1.版权归原作者Moment ° 回忆 ✨所有; 2.未经原作者允许不得转载本文内容,否则将视为侵权; 3.转载或者引用本文内容请注明来源及原作者; 4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。 https://blog.csdn.net/qq_35366269/article/details/83717405

LruCache是什么?

    LruCache 是least recentlly used 的简称,意思是最近最少使用算法,它可以实现将最近最少使用的对象回收掉,从而保证内存不会超出范围可将LruCache当成一个容器,它就相当于一个map集合。

为什么使用LruCache来管理内存?

         因为从Android 2.3以后,垃圾回收机制会更倾向于回收持有软引用和弱引用的对象,也就是说可能在内存充足的情况下也会回收软引用或弱引用,这样就是失去了内存缓存的意义,而这个时候就可以使用LruCache来管理内存 , LruCache就是一个解决内存溢出的类,它能够自己控制内存大小,从而避免内存溢出。

怎么使用LruCache来进行内存缓存的管理?

         

package com.casic.bitmaputils.utils;

import android.graphics.Bitmap;
import android.util.Log;
import android.util.LruCache;

/**
 * @author 郭宝
 * @project: BitmapUtils
 * @package: com.casic.bitmaputils.utils
 * @date: 2018/10/28 0028 13:11
 * @brief: 内存缓存(利用软引用加以优化)
 */

public class MemoryCacheImagesUtil {

    private static final String TAG = "MemoryCacheImagesUtil";

    //二级优化
    private LruCache<String,Bitmap> mLruCache ;


    //二级优化
    public MemoryCacheImagesUtil(){

        //获取Android系统给App分配的运行内存, 返回的数据以B为单位
        long maxMemory = Runtime.getRuntime().maxMemory();
        Log.i(TAG,"maxMemory:"+maxMemory);
        //maxMemory:402653184

        mLruCache = new LruCache<String,Bitmap>((int) (maxMemory/8)){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //获取每张图片的总字节大小
                int byteCount = value.getByteCount();
                return byteCount;
            }
        };  
    }


    /**
     * 设置内存缓存
     * 设置内存缓存时首先需要在网络下载成功以后设置下,然后在获取本地缓存时设置下
     * @param url
     * @param bitmap
     */
    public void setMemoryCache(String url,Bitmap bitmap){

        //二级优化
        mLruCache.put(url,bitmap);

    }

    /**
     * 根据url获取内存缓存中的bitmap对象
     * @param url
     * @return
     */
    public Bitmap getMemoryCache(String url){

        /*
        * 二级优化
        * */
        return mLruCache.get(url);
    }

}

猜你喜欢

转载自blog.csdn.net/qq_35366269/article/details/83717405