图片的三级缓存(自己实现)

本文详细介绍了图片三级缓存的工作原理,包括运存、内存和网络缓存。通过创建ImageCache类继承LruCache,并结合单例模式的CacheUtil和HttpUtil类,实现了图片的缓存和加载。即使在网络断开的情况下,也能保证图片正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是关于图片三级缓存的详解

在很多手机App上我们经常能发现,在没有网的情况下有些图片依然能够正常加载,这是为什么呢?这是因为写App的时候用了图片缓存机制,当你第一次打开App的时候它已经把图片缓存到你的手机,所以第二次打开App的时候即使没有网络图片也能够正常加载,三级缓存,来自于手机的运存,内存,还有网络,现在开源代码实现三级缓存的机制有很多,比如说大家常用的glide,picasso,今天咱们就写一个自己图片缓存机制,话不多说,请看以下内容

这是第一次打开App的效果
在这里插入图片描述
这是我们关掉网络,重新打开App的效果,此时手机是没有网的,图片依然能正常加载
在这里插入图片描述

第一步
首先我们先创建一个ImageCache类继承LruCache并且携带两个参数分别是String类型和Bitmap类型,上代码

public class ImageCache extends LruCache<String, Bitmap> {
    private Map<String, SoftReference<Bitmap>> cacheMap;
	//重写构造方法
    public ImageCache(Map<String, SoftReference<Bitmap>> cacheMap) {
        super((int) (Runtime.getRuntime().maxMemory() / 8));//这里是设置做多占手机内存的1/8,
        this.cacheMap = cacheMap;
    }

    public Map<String, SoftReference<Bitmap>> getCacheMap() {
        return cacheMap;
    }
}

第二步,写我们的缓存机制
新建一个类,命名为CacheUtil,这里我用的是一个单例模式,这里有两个参数,分别是Context,ImageCache,然后重构

public class CacheUtil {
    private static CacheUtil instance;
    private Context context;
    private ImageCache imageCache;

    public CacheUtil(Context context) {
        this.context = context;
         Map<String, SoftReference<Bitmap>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值