【Android开发新手的学习笔记】使用LruCache对ListView进行优化

来源:互联网 发布:linux系统主要用途 编辑:程序博客网 时间:2024/06/04 18:38

Lru算法即近期最少使用算法。

Android提供LruCache类来实现这个缓存算法,在内存空间足够的情况下将内容存储到内存中,当内存空间不足时,将近期最少使用的空间腾出,用来存储其它内容。


LruCahce本质上是一个HashMap,所以能够使用一些HashMap类的方法。

我的理解是,在浏览ListView时,将需要缓存的数据存到LruCache这个HashMap中,在需要用到的时候,在LruCache这个HashMap中取出来。只不过LruCache这个HashMap还带有近期最少使用算法这个功能。


在上一篇文章里,用异步加载的方式实现了一个图文混排的ListView,如果不将获取到的图片缓存下来,那使用的过程将会消耗很多流量去重复获取数据,所以现在使用LruCache类将数据缓存下来。


使用LruCache类,在new一个LruCache时,要指定LruCache的缓存大小Maxsize。可以先用Runtime类的getRuntime().getMaxMemory();方法来获取当前可用的空间,然后再指定缓存空间大小,这里的MaxSize=MaxMeory/4;

同时,还要重写sizeOf()方法,这个方法在数据存入缓存时调用,计算出存入的数据的大小,这里存入的是图片,所以这个方法应该返回的是图片的大小。

int MaxMemory = (int) Runtime.getRuntime().maxMemory();int MaxSize=MaxMemory/4;mCache=new LruCache<String,Bitmap>(MaxSize){    @Override    protected int sizeOf(String key, Bitmap value) {        return value.getByteCount();    }};

然后在获取图片之前,先判断是否在缓存中已经存在。如果存在,则直接取出,更新UI。如果不存在,则获取图片,然后存入缓存,再更新UI。


最后,除了可以将图片存在上述的内存缓存中,还可以将图片存到本地的硬盘空间中。上述的内存缓存称为一级缓存,存到本地硬盘控件的缓存称为二级缓存。

0 0