Android-LruCache与DiskLruCache

时间:2023-03-09 16:47:31
Android-LruCache与DiskLruCache

Android LruCache与DiskLruCache

学习自

  • Android开发艺术探索
  • https://blog.****.net/guolin_blog/article/details/28863651

例行废话

在上一篇的 认识Bitmap 的博客,学会了如何更好地加载Bitmap,那么这一片文章呢,我们来学习一下如何缓存Bitmap。

当我们第一次从网络上加载图片的时候,这时候我们就已将将图片加载到了内存中了,然么我们第二次再加载同一个图片的时候,就完全没有必要再从网络上再加相同的图片了。当我们第一加载图片的时候直接将图片缓存到本地第二次加载图片的时候直接去本地取就行。这样不经可以节省用户的流量并且还要比直接从网络上读取要更款速(毕竟网络有带宽的限制)。 并且我们可以在本地和内存中分开存储(内存中只放使用频率最高的),因为知己从内存中加载要更快与从本地加载,可以让用户体验更加友好。

Lru算法

当然,因为不管是内存还是手机的存储都不是特别打的,所以我们并不能无节制的缓存图片,尤其是内存中的缓存,如果因为内存中缓存过大影响到APP的运行效率了那可就是因噎废食了。 所以说缓存的大小必须是严格限制的。

现在,如何管理缓存是一个比较重要的问题,最简单的方法是当缓存满了以后按照时间排序,然后移除最早缓存的图片,当然这种方法并不完美,现在普遍采用的算法是 Lru算法,即,最早加载最少使用的缓存被先移除

万幸,我们并不用去自己写相应的内存和本地磁盘的缓存算法, 相应的类已经被提供了。 Android SDK提供了一种 内存的Lru缓存类LruCache. 而磁盘缓存的类并没有在SDK中提供,我们需要手动下载 DiskLruCache.

通过这两个类我们就可以实现图片的缓存了,并且我们还可以通过将这两个类封装一下形成自己的 ImageLoader 框架。

LruCache

下面是LruCache类的声明,可以发现LRUCache 类 和Map集合非常类似(