浅谈Android中图片的三级缓存策略-创新互联
什么是三级缓存?
安顺网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联建站公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。- 内存缓存,优先加载,速度最快
- 本地缓存,次优先加载,速度快
- 网络缓存,最后加载,速度慢,浪费流量
为什么要进行三级缓存
三级缓存策略,最实在的意义就是 减少不必要的流量消耗,增加加载速度 。
如今的 APP 网络交互似乎已经必不可少,通过网络获取图片再正常不过了。但是,每次启动应用都要从网络获取图片,或者是想重复浏览一些图片的时候,每次浏览都需要网络获取,消耗的流量就多了,在如今的流量资费来说,肯定会容易影响用户数量。
还有就是网络加载图片,有时候会加载很慢,影响了用户体验。
另外从开发角度来说,Bitmap 的创建非常消耗时间和内存,可能导致频繁GC。而使用缓存策略,会更加高效地加载 Bitmap,减少卡顿,从而减少读取时间。
而内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,硬盘缓存则是防止应用重复从网络或其他地方重复下载和读取数据。
三级缓存的原理
- 首次加载的时候通过网络加载,获取图片,然后保存到内存和 SD 卡中。
- 之后运行 APP 时,优先访问内存中的图片缓存。
- 如果内存没有,则加载本地 SD 卡中的图片。
具体的缓存策略可以是这样的:内存作为一级缓存,本地作为二级缓存,网络加载为最后。其中,内存使用 LruCache ,其内部通过 LinkedhashMap 来持有外界缓存对象的强引用;对于本地缓存,使用 DiskLruCache。加载图片的时候,首先使用 LRU 方式进行寻找,找不到指定内容,按照三级缓存的方式,进行本地搜索,还没有就网络加载。
图片缓存代码实现
自己实现一个三级缓存的工具类并不困难。大概可以这样:
public class BitmapUtil{ //单例模式 //··· public void displayImage(ImageView img, String url){ Bitmap bitmap; //内存缓存,url做唯一标识符 bitmap = loadBitmapFromMemoryCache(url); if(bitmap != null){ img.setImageBitmap(bitmap); return ; } //本地缓存 bitmap = loadBitmapFromDiskCache(url); if(bitmap != null){ img.setImageBitmap(bitmap); //然后将本地缓存保存到内存缓存中 return ; } //网络缓存 bitmap = loadBitmapFromNet(url); if(bitmap != null){ img.setImageBitmap(bitmap); //同理将缓存保存到内存和本地中 return; } } }
本文名称:浅谈Android中图片的三级缓存策略-创新互联
URL链接:http://lswzjz.com/article/deeipj.html