Android图片三级缓存机制研究

来源:互联网 发布:微信淘客与淘宝客 编辑:程序博客网 时间:2024/05/22 13:29

         Android应用中图片的缓存机制非常重要,因为不能每次需要图片时都要去网络中请求,这样会消耗很大的流量,同时加载的效率会很慢,造成很不好的用户体验。然后我们分析知道,要快速的获取图片信息,从内存中获取的效率肯定是最高的,其次从本地网络读取的效率也可以,从网络下载获取因为与网络的情况有很大关系,效率会比较低。因此我们一般使用图片的三级缓存机制来显示图片。

        我们要清除三级缓存的基本逻辑:首先,判断在内存缓存中是否存在图片,不存在去文件缓存中获取图片,如果也不存在则去网络中获取(网络获取的过程要在子线程中执行,使用异步加载的方式执行)。注意,每次加载图片后,都要将数据重新放到内存缓存中(除了从内存缓存中取的)。

      一、内存缓存:2.3之前很多内存缓存使用softReference的方式(软引用),将数据保存到内存中,但是之后google推荐使用LruCache的方式进行缓存,它是使用Lru算法的强引用的缓存方式,内部维护一个LinkedHashMap<String,Bitmap>(如果保存图片就使用Bitmap)对象,这个对象的特点是将最新使用过的bitmap对象放到队列的前面,这样的话可以设置优先删除最近最少使用的对象(leak used)。

     二、文件缓存:使用DiskLruCache,这种方式不是google定义的,但是是得到google官方认证的方法,内部也是使用一个LinkedHashMap<String,Entry> 对象进行存储,key表示唯一值,一般是imageUrl的加密值(因为直接使用URL来作为key?不太合适,因为图片URL中可能包含一些特殊字符,这些字符有可能在命名文件时是不合法的)

     三、网络缓存:使用HashSet(BitmapWorkTask)对象存放启动的网络请求,在结束界面时可以手动的关闭未进行或完成的网络请求,其中BitmapWorkTask是继承自AsynTask,doInBackGround执行下载的过程,图片下载后先保存到内存缓存中,然后根据界面需求切割图片,将图片保存到内存缓存中,然后交给view处理。

1 0
原创粉丝点击