首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android 应用开发 之使用LruCache跟DiskLruCache来在内存和SD卡中缓存图片

2013-10-08 
Android 应用开发 之使用LruCache和DiskLruCache来在内存和SD卡中缓存图片之前写过一篇文章,通过Android提

Android 应用开发 之使用LruCache和DiskLruCache来在内存和SD卡中缓存图片

    之前写过一篇文章,通过Android提供的AsyncTask和自己实现的ThreadPool两种方法来实现了图片数据的异步加载,但在实际应用中,仅仅做到这样是不够的。我们在GridView中加载了大量的图片数据,但当我们向上向下来回滚动的时候,之前加载过的图片都会重新从服务器中获取,这样显然不是很好的用户体验。对用户来说,在上下滚动的时候,曾经看过不久的图片能够马上显示出来,而不是要等待从服务器下载那么久,才是更好的用户体验。

    为了实现这样的需求,Android为我们提供了LruCache和DiskLruCache两个工具。

    本文原创,如需转载,请注明转载地址http://blog.csdn.net/carrey1989/article/details/12152651

    我们今天讲解的代码建立在上一篇文章的基础之上,感兴趣的同学可以点击这里来查看。在文章最后有提供源码的下载链接。

    首先整体来说一下我们的思路:

    我们将在一个GridView中加载图片数据,在获取图片数据的时候,首先判断内存缓存中是否保存了这张图片。如果没有,将启动一个异步回调过程,先从SD卡中获得缓存的图片,如果依然没有,就会从服务器中来请求图片数据了。剩下的步骤就是刷新和缓存的工作了。

    上面的思路比较笼统,接下来会比较详细的讲解具体的代码。

    看一下项目的结构:

Android 应用开发 之使用LruCache跟DiskLruCache来在内存和SD卡中缓存图片

    与内存缓存和SD卡缓存相关的处理主要在MainActivity.java和MyThreadPoolTask.java两个类中。

    先看一下MainActivity.java的代码,下面会做出具体的解释:

    通过与上一篇文章的效果对比可以看出,在之前加载过的图片数据再次加载的速度上要快了不少。
如果我们这个时候退出应用,然后再次打开应用,这个时候加载的图片实际上都是从SD卡中加载的:

Android 应用开发 之使用LruCache跟DiskLruCache来在内存和SD卡中缓存图片

    DiskLruCache会在SD卡中创建我们指定的缓存目录,在其中会存放我们缓存的文件:

Android 应用开发 之使用LruCache跟DiskLruCache来在内存和SD卡中缓存图片

    下面贴出源码的下载链接,如果有什么问题,欢迎留言交流!

源码下载

热点排行