资讯专栏INFORMATION COLUMN

关于Fresco的缓存清理的那些事

张春雷 / 3575人阅读

摘要:前言我相信很多人对这个优秀的第三方网络图片处理框架不陌生,无论从使用还是配置而言都是很人性化的简单,今天要讲述的是我遇到的关于缓存清理的事情。

前言

我相信很多人对Fresco这个优秀的第三方网络图片处理框架不陌生,无论从使用还是配置而言都是很人性化的简单,今天要讲述的是我遇到的关于缓存清理的事情。

正文 Fresco自身的缓存清理时机

当我们手动退出整个app的时候,发现之前加载过的图片不会出现重新加载的情况,说明这种情况下,缓存依旧还在。但是当我们通过手机的后台关闭app的时候,就会出现重新加载,缓存也没了。这个是我们人为测出来的,你们也可以试试,这是Fresco自身的一个清理机制。

Fresco的缓存哪里统计

用过这个框架的人很多,但是真的去计算他的缓存了多少的人,貌似并不多,我也是百度了无数,然而并没有找到答案,我一度以为也许是他封装处理的太深了,后来去看源码,准备做最后的策略,找到他的缓存文件夹的目录,然后计算文件夹的大小,这也是很多第三方网络图片加载计算缓存的一个套路方式,这个方法可行,但是麻烦了点,最终我在google上一个老外的帖子里面,看到了方法,大家可以看看

    private void showCacheSize(){
        ivClean.setVisibility(View.INVISIBLE);
        tvCacheSize.setVisibility(View.VISIBLE);
        long cacheSize = Fresco.getImagePipelineFactory().getMainDiskStorageCache().getSize();
        if(cacheSize<=0){
            tvCacheSize.setText("0.00B");
        }else{
            float cacheSizeTemp1 = CommUtil.changToTwoDecimal(Math.round(cacheSize / 1024));
            float cacheSizeTemp2 = CommUtil.changToTwoDecimal(Math.round((cacheSize/1024)/1024));
            if(cacheSizeTemp1<1){
                tvCacheSize.setText(cacheSize+"B");
            }else if(((cacheSizeTemp1>=1)&&(cacheSizeTemp2<1))){
                tvCacheSize.setText(cacheSizeTemp1+"KB");
            }else if(cacheSizeTemp2>=1){
                tvCacheSize.setText(cacheSizeTemp2+"MB");
            }
        }
    }

这个显示方法是我自己写,大家只要看到核心的那句

long cacheSize =Fresco.getImagePipelineFactory().getMainDiskStorageCache().getSize();

这是最简单的方式了没有之一,这是显示的部分,让我们再看看如何清理

Fresco的缓存如何清理

一般来说我们都不太需要手动去清理,因为Fresco本身就带有自我清理的机制,详情看上面的清理时机,但是当我们的app需要一个清理缓存的功能的需求的时候,一言不合就去找方法,很欣慰我们还是找到了

            case id.tvCleanCache:
                ImagePipeline imagePipeline = Fresco.getImagePipeline();
                imagePipeline.clearCaches();
                ivClean.setVisibility(View.VISIBLE);
                tvCacheSize.setVisibility(View.INVISIBLE);
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        showCacheSize();
                    }
                }, 2000);
                break;

因为我们需要一个表示在清理的过程动画,清理缓存的关键代码就是

ImagePipeline imagePipeline = Fresco.getImagePipeline();
                imagePipeline.clearCaches();

这样就清理了,你会发现之前的加载的图片又会重新加载了,成功了!

总结

实践才是最好的学习方式,本篇文章不难,只是找寻答案的过程很重要,是一个程序员自我完善的一个学习过程,希望能help到有需要的朋友,?,bye

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12918.html

相关文章

  • 网络相关 - 收藏集 - 掘金

    摘要:关于三请求流程,源码必知掘金前两两片我们介绍了,基本使用和如何查看源码,今天我们正式进入源码分析流程。掘金是一款上的组件。 一篇文章带你走通 OkHttp+Retrofit+Rxjava - Android - 掘金一篇文章带你走通 OkHttp+Retrofit+Rxjava @(Android)[android] ... 升级 Https 的那些事 - Android - 掘金一、...

    haobowd 评论0 收藏0
  • 网络相关 - 收藏集 - 掘金

    摘要:关于三请求流程,源码必知掘金前两两片我们介绍了,基本使用和如何查看源码,今天我们正式进入源码分析流程。掘金是一款上的组件。 一篇文章带你走通 OkHttp+Retrofit+Rxjava - Android - 掘金一篇文章带你走通 OkHttp+Retrofit+Rxjava @(Android)[android] ... 升级 Https 的那些事 - Android - 掘金一、...

    pf_miles 评论0 收藏0
  • Android常用图片加载库介绍及对比

    摘要:前言图片加载在开发项目中是必不可少的,为了降低开发周期和难度,我们经常会选用一些图片加载的开源库,而发展到现在图片加载开源库也越来越多了,下面介绍几种开发中主流的图片加载框架以及他们之间的对比优缺点。 前言 图片加载在 Android开发项目中是必不可少的,为了降低开发周期和难度,我们经常会选用一些图片加载的开源库,而Android发展到现在图片加载开源库也越来越多了,下面介绍几种开发...

    Yangyang 评论0 收藏0
  • 缓存那些

    摘要:分布式缓存应用和缓存分离,缓存单独作为一个系统单独部署,多个应用可以共享的访问缓存。通过静态变量一次获取所有的数据缓存起来避免频繁的读取。类似的分布式缓存实现方案还有的集群方案,其实现思想和的实现思想大相径庭。 0x01 前言 提到缓存,那么缓存是什么,为什么需要缓存? 如果知道一点点计算机方面的知识就会知道,计算机的构造也是由多级缓存->硬盘一起来构造计算机的数据存储。当然这里不是来...

    BigTomato 评论0 收藏0
  • 缓存那些

    摘要:分布式缓存应用和缓存分离,缓存单独作为一个系统单独部署,多个应用可以共享的访问缓存。通过静态变量一次获取所有的数据缓存起来避免频繁的读取。类似的分布式缓存实现方案还有的集群方案,其实现思想和的实现思想大相径庭。 0x01 前言 提到缓存,那么缓存是什么,为什么需要缓存? 如果知道一点点计算机方面的知识就会知道,计算机的构造也是由多级缓存->硬盘一起来构造计算机的数据存储。当然这里不是来...

    Sike 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<