图片的三级缓存(内存、文件、网络)

本文介绍了Android应用中图片的三级缓存机制,包括网络、本地和内存缓存,旨在减少网络交互,节省流量。详细阐述了三级缓存的工作原理,并提供了具体的实现方法,如AsyncTask用于网络异步加载,内存缓存中使用LruCache避免内存溢出。

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

1、为什么要使用三级缓存

  • 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了
  • 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响
  • 特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知
  • 所以提出三级缓存策略,通过网络、本地、内存三级缓存图片,来减少不必要的网络交互,避免浪费流量

2、什么是三级缓存

  • 网络缓存, 不优先加载, 速度慢,浪费流量
  • 本地缓存, 次优先加载, 速度快
  • 内存缓存, 优先加载, 速度最快

3、三级缓存原理

首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中 之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片 总之,只在初次访问新内容时,才通过网络获取图片资源

4、具体实现及代码

1. 图片缓存工具类(MyBitmapUtils)

通过new MyBitmapUtils().display(ImageView ivPic, String url) 提供给外部方法进行图片缓存的接口
参数含义:ivPic 用于显示图片的ImageView,url 获取图片的网络地址

 /**
     * BitmapUtils工具类,实现三级缓存
     */
    public class MyBitmapUtils {
   
   

        private NetCacheUtils mNetCacheUtils;
        private LocalCacheUtils mLocalCacheUtils;
        private MemoryCacheUtils mMemoryCacheUtils;

        public MyBitmapUtils(){
            mMemoryCacheUtils=new MemoryCacheUtils();
            mLocalCacheUtils=new LocalCacheUtils();
            mNetCacheUtils=new NetCacheUtils(mLocalCacheUtils,mMemoryCacheUtils);
        }

        public void disPlay(ImageView ivPic, String url) {
            ivPic.setImageResource(R.mipmap.pic_item_list_default);
            Bitmap bitmap;
            //内存缓存
            bitmap=mMemoryCacheUtils.getBitmapFromMemory(url);
            if (bitmap!=null){
                ivPic.setImageBitmap(bitmap);
                System.out.println("从内存获取图片啦.....");
                return;
            }

            //本地缓存
            bitmap = mLocalCacheUtils.getBitmapFromLocal(url);
            if(bitmap !=null){
                ivPic.setImageBitmap(bitmap);
                System.out.println("从本地获取图片啦.....");
                //从本地获取图片后,保存至内存中
                mMemoryCacheUtils.setBitmapToMemory(url,bitmap);
                return;
            }
            //网络缓存
            mNetCacheUtils.getBitmapFromNet(ivPic,url);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值