Android图片的三级缓存

来源:互联网 发布:郑州自学考试网络报名 编辑:程序博客网 时间:2024/05/16 18:10

移动应用中,我们一般将网络图片分为三个级别,第一级别是网络层,即根据图片的url地址可以找到服务器上相应图片,获取这一层的图片会消耗流量,所以我们希望可以获取后本地就永久使用,所以就会有接下来的缓存策略;第二层缓存是在手机内存层,是将第一层的图片下载到手机内存,这种缓存读取速度非常快,但当图片内存被回收时,图片自然就不会存在了,第三层则是在手机硬盘层,是会缓存到sd卡。但这一层相对于内存的读取速度会慢很多,所以,很好的协调这三层图片缓存就可以提升应用性能和用户体验。

秉着不重复造轮子原则,这里我采用Volley+LruCache+DiskLruCache三个谷歌官方认可的库来实现网络图片三级缓存。并且以“one line”风格来实现将网络图片显示在ImageView上,而无需关心任何缓存细节。


类库下载

  1. Volley是Goole在2013年Google I/O大会上推出了一个新的网络通信框架,它是开源的,你可以通过git来clone源码并倒入项目:
git clone https://android.googlesource.com/platform/frameworks/volley

这个地址可能会被和谐,所以你可以在这里下载完整的jar包:

2.LruCache这个类是Android3.1版本中提供的,如果你是在更早的Android版本中开发,则需要导入android-support-v4的jar包。

3.DiskLruCache是非Google官方编写,但获得官方认证的硬盘缓存类,该类没有限定在Android内,所以理论上java应用也可以使用DiskLreCache来缓存。该类你可以在这个下载:http://cdn.saymagic.cn/150131132428.java

方法与流程

1.要想实现图片三级缓存,就需要将图片下载到本地,我们所有网络图片请求都是通过Volley来统一管理的,Volley需要我们声明一个RequesQueuetManager来维持请求队列,因此,我们首先定义RequesQueuetManager类来管理RequesQueuetManager,代码如下:

public class RequesQueuetManager {public static RequestQueue mRequestQueue = Volley.newRequestQueue(DemoApplication.getInstance());public static void addRequest(Request<?> request, Object object){if (object != null){request.setTag(object);}mRequestQueue.add(request);}public static void cancelAll(Object tag) {mRequestQueue.cancelAll(tag);}}

因为RequestQueue需要一个Context类型参数,所以我们在Volley.newRequestQueue(DemoApplication.getInstance())这句里传入了DemoApplication.getInstance(),这个静态方法是什么呢?就是应用的application实例,我们自定义一个application,然后将这个application传入给RequestQueue,我们自定义的application如下:

  1. publicclassDemoApplicationextendsApplication{
  2. publicstaticString TAG;
  3. privatestaticDemoApplication application;
  4. publicstaticDemoApplication getInstance(){
  5. return application;
  6. }
  7. @Override
  8. publicvoid onCreate(){
  9. super.onCreate();
  10. TAG =this.getClass().getSimpleName();
  11. application =this;
  12. }
  13. }
  要记得将自定义的application添加到AndroidManifest.xml文件的application标签的name属性里:

0 0