Android开源框架Universal-Image-Loader完全解析(二)

继续上篇Android开源框架Universal-Image-Loader解析(一),本篇文章给大家分享的是Android开源框架Universal-Image-Loader解析之图片缓存策略。

我们一般去加载大量的图片的时候,都会做缓存策略,缓存又分为内存缓存硬盘缓存,我之前也写了几篇异步加载大量图片的文章,使用的内存缓存是LruCache这个类,LRU是Least Recently Used 近期最少使用算法,我们可以给LruCache设定一个缓存图片的最大值,它会自动帮我们管理好缓存的图片总大小是否超过我们设定的值, 超过就删除近期最少使用的图片,而作为一个强大的图片加载框架,Universal-Image-Loader自然也提供了多种图片的缓存策略,下面就来详细的介绍下。

内存缓存

首先我们来了解下什么是强引用和什么是弱引用?

强引用是指创建一个对象并把这个对象赋给一个引用变量,强引用有引用变量指向时永远不会被垃圾回收。即使内存不足的时候宁愿报OOM也不被垃圾回收器回收,我们new的对象都是强引用。

弱引用通过weakReference类来实现,它具有很强的不确定性,如果垃圾回收器扫描到有着WeakReference的对象,就会将其回收释放内存。

现在我们来看Universal-Image-Loader有哪些内存缓存策略

1. 只使用的是强引用缓存 

·LruMemoryCache(这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用,下面我会从源码上面分析这个类)

2.使用强引用和弱引用相结合的缓存

·UsingFreqLimitedMemoryCache(如果缓存的图片总量超过限定值,先删除使用频率最小的bitmap)

·LRULimitedMemoryCache(这个也是使用的lru算法,和LruMemoryCache不同的是,他缓存的是bitmap的弱引用)

·FIFOLimitedMemoryCache(先进先出的缓存策略,当超过设定值,先删除最先加入缓存的bitmap)

·LargestLimitedMemoryCache(当超过缓存限定值,先删除最大的bitmap对象)

·LimitedAgeMemoryCache(当 bitmap加入缓存中的时间超过我们设定的值,将其删除)

3.只使用弱引用缓存

·WeakMemoryCache(这个类缓存bitmap的总大小没有限制,唯一不足的地方就是不稳定,缓存的图片容易被回收掉)

上面介绍了Universal-Image-Loader所提供的所有的内存缓存的类,当然我们也可以使用我们自己写的内存缓存类,我们还要看看要怎么将这些内存缓存加入到我们的项目中,我们只需要配置ImageLoaderConfiguration.memoryCache(...),如下:

?

1

2

3

de >ImageLoaderConfiguration configuration = de>de >newde> de >ImageLoaderConfiguration.Builder(de>de >thisde>de >)  de>

de >        de>de >.memoryCache(de>de >newde> de >WeakMemoryCache())  de>

de >        de>de >.build();de>

下面我们来分析LruMemoryCache这个类的源代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Tag:

Freenovo 发表于2013-12-09 21:38:00 | 编辑 | 分享 0

引用地址:

原文地址:https://www.cnblogs.com/freenovo/p/4469792.html