关于Fresco的缓存清理的那些事
来源:互联网 发布:it团队建设 编辑:程序博客网 时间:2024/05/17 18:27
前言
我相信很多人对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
0 0
- 关于Fresco的缓存清理的那些事
- Fresco正传(7):如何手动清理Fresco的缓存。
- 关于Fresco的三级缓存机制
- Fresco清理缓存
- Fresco清理缓存
- Fresco的缓存机制
- 关于缓存的那些传说
- 关于fresco的使用之--CacheKey获取本地缓存
- Fresco的使用和缓存清理
- 关于Fresco的介绍
- 关于Fresco的
- ajax的缓存清理
- ajax的缓存清理
- 键盘输入缓存的清理
- Xcode的缓存清理
- 关于清理JBoss服务器端jsp文件缓存的问题
- 【缓存\性能】HTML5缓存的那些事
- 分布式缓存的那些事
- Spring 集成 MyBatis: 自动注入映射器导致项目启动报错
- PHP学习记录
- Postgresql连接状况及优化
- sharedpreferences的两种提交方式apply commit
- C++拦截窗口过程
- 关于Fresco的缓存清理的那些事
- org.activiti.engine.ActivitiException: Couldn't deserialize object in variable 'application'
- 单例
- C++线程操作
- dataTable 、dataView、Dataset 区别的经典回答
- 打油歌--想太多(原创)
- 如何在限宽的容器中实现全屏效果
- swift UISlider
- Redis的安装与使用(单节点)