欢迎来到天天文库
浏览记录
ID:42629447
大小:348.50 KB
页数:7页
时间:2019-09-19
《基于Volley和DiskLruCache的缓存策略》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于Volley和DiskLruCache的缓存策略在我们开发应用过程中,不可避免的使用网络图片,那么图片请求和缓存就成了一个问题,本着为用户节省流量的角度,我们的应用就应该是已经下载的图片不会重复下载,以及下载过的图片没有网络也能查看的效果,这里就涉及到了网络请求、内存缓存和磁盘缓存。简单的介绍一下今天的两位主角:DiskLruCache :是基于Lru磁盘缓存的Java实现。Volley :Google推出的Android异步网络请求框架和图片加载框架(自备梯子)。细心的小伙伴应该发现咋是两个主角呢,说好的内存缓存呢?其实在Volley中已经默认实现内存缓存了,我们简单的介
2、绍下Volley的接口及关键函数(以下为引用)。ImageLoaderImageLoader类需要一个请求的实例以及一个ImageCache类的实现。图片通过传递一个URL和一个ImageListener实例到get()方法进行加载。从那里,ImageLoader检查ImageCache,如果图像不是在缓存中,就从网络中加载图片。NetworkImageView这个类代替布局中的ImageViews类,而且需要使用ImageLoader类。NetworkImageView类的setUrl()方法需要一个URL路径字符串和一个ImageLoader实例。然后使用ImageLode
3、r的get()方法来获取图片数据。ImageCacheVolley库的ImageCache接口允许你使用你喜好的L1缓存实现。
4、ImageCache接口有两个方法,getBitmap(Stringurl)和putBitmap(Stringurl,Bitmapbitmap)。这些桩是非常简单的,它们可以添加到任何缓存实现里。有两种可用的缓存实现。推荐的方法是在内存中使用一个基础的LRU缓存。对于硬盘的缓存实现,我选择使用JackWharton编写的DiskLruCache。我选择这个实现是因为它在Android社区中被频繁的使用。使用一个基于磁盘的L1缓存可能导致阻塞I/O问题。Volley已经有一个隐式的硬盘L2缓存。硬盘L1缓存已经被包含在内了。原生项目的介绍如下以下是这个实现的主要组件:Reques
5、tManagerRequestManager维护我们的RequestQueue的一个引用。Volley使用ResuestQueue来处理我们对Twitter数据和图片加载的请求。GsonRequestGsonRequest与图片加载没有直接联系,但它代表了如何扩展Volley请求类来处理JSON解析。该类用于对Twitter的GET请求和TwitterData对象的结果。BitmapLruImageCache该类是一个基本的“最近最少使用(LRU)”内存缓存实现。它速度快但不会阻塞I/O。这是推荐的方法。DiskLruImageCacheDiskLruImageCache是一个
6、位图版本的DiskLruCache封装。它从DiskLruCache中增加并检索位图,还处理缓存的实例化。硬盘缓存可能会造成I/O阻塞。ImageCacheManagerImageCacheManager持有ImageCache和VolleyImageLoader引用。在ImageCacheManager中,你可能注意到一点就是我们使用URL字符串的hashCode()作为缓存的键值。这是由于URL中的某些字符不能作为缓存的键值。BuzzArrayAdapter该适配器比较简单的。这里只需要注意一点,我们要实现Volley的Listener和ErrorListener接口,并且
7、把该适配器作为Listener参数传递给了NetworkImageView的setUrl(Stringstring,Listenerlistener,ErrorListenererrorListener)方法。这个适配器包含了一些额外代码用于滚动时加载旧的tweets。以上就是原博的内容,我们的改造是基于这个项目来进行的。首先来介绍下具体的思路,如图:简单介绍一下思路:加载图片使用的是NetworkImageView的setImageUrl()方法,参数是图片的下载地址URL和ImageLo
此文档下载收益归作者所有