浅谈Android中图片的三级缓存策略-创新互联

什么是三级缓存?

安顺网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联建站公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站
  1. 内存缓存,优先加载,速度最快
  2. 本地缓存,次优先加载,速度快
  3. 网络缓存,最后加载,速度慢,浪费流量

为什么要进行三级缓存

三级缓存策略,最实在的意义就是 减少不必要的流量消耗,增加加载速度 。

如今的 APP 网络交互似乎已经必不可少,通过网络获取图片再正常不过了。但是,每次启动应用都要从网络获取图片,或者是想重复浏览一些图片的时候,每次浏览都需要网络获取,消耗的流量就多了,在如今的流量资费来说,肯定会容易影响用户数量。

还有就是网络加载图片,有时候会加载很慢,影响了用户体验。

另外从开发角度来说,Bitmap 的创建非常消耗时间和内存,可能导致频繁GC。而使用缓存策略,会更加高效地加载 Bitmap,减少卡顿,从而减少读取时间。

而内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,硬盘缓存则是防止应用重复从网络或其他地方重复下载和读取数据。

三级缓存的原理

  1. 首次加载的时候通过网络加载,获取图片,然后保存到内存和 SD 卡中。
  2. 之后运行 APP 时,优先访问内存中的图片缓存。
  3. 如果内存没有,则加载本地 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中图片的三级缓存策略-创新互联
当前路径:http://csdahua.cn/article/deeipj.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流