图片缓存

android之图片缓存的探究

笑着哭i 提交于 2019-12-03 00:03:25
在用户界面(UI)加载一张图片时很简单,然而,如果你需要加载多张较大的图像,事情就会变得更加复杂,。在许多情况下(如与像的ListView GridView或ViewPager的组件),屏幕上的图片的总数伴随屏幕上滚动的骤然增加,且基本上是无限的。为使内存使用保持在稳定范围内,这些组件会在子view在屏幕中消失后,对其进行资源回收,垃圾回收机制会释放掉已加载的图片内存空间,所以建议你不要保持图片的常引用,这样做很好,为了保证页面的流畅性和响应速度,你可能不愿意在页面返回时频繁处理加载过图片。通过内存、磁盘的缓存就可以帮助你快速加载已加载的图片。 今天与大家分享一下图片的缓存技术,利用它可以提高UI的流畅性、响应速度,给用户好的体验。 如何在内存中做缓存? 通过内存缓存可以快速加载缓存图片,但会消耗应用的内存空间。LruCache类(通过兼容包可以支持到sdk4)很适合做图片缓存,它通过LinkedHashMap保持图片的强引用方式存储图片,当缓存空间超过设置定的限值时会释放掉早期的缓存。 注:在过去,常用的内存缓存实现是通过SoftReference或WeakReference,但不建议这样做。从Android2.3(API等级9)垃圾收集器开始更积极收集软/弱引用,这使得它们相当无效。此外,在Android 3.0(API等级11)之前

开源选型之 Android 三大图片缓存原理、特性对比

﹥>﹥吖頭↗ 提交于 2019-11-26 12:23:38
这是我在 MDCC 上分享的内容(略微改动),也是源码解析第一期发布时介绍的源码解析后续会慢慢做的事。 从总体设计和原理上对几个图片缓存进行对比,没用到他们的朋友也可以了解他们在某些特性上的实现。 略掉前面关于选择开源项目的好处及如何选择开源项目的部分(回复"开源项目"查看),进入重点。 一. 四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用。 Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所以广为人知。 Glide 是 Google 员工的开源项目,被一些 Google App 使用,在去年的 Google I/O 上被推荐,不过目前国内资料不多。 Fresco 是 Facebook 在今年上半年开源的图片缓存,主要特点包括: (1) 两个内存缓存加上 Native 缓存构成了三级缓存 (2) 支持流式,可以类似网页上模糊渐进式显示图片 (3) 对多帧动画图片支持更好,如 Gif、WebP 鉴于 Fresco 还没发布正式的 1.0 版本,同时一直没太多时间熟悉 Fresco 源码,后面对比不包括 Fresco,以后有时间再加入对比。 二、基本概念 在正式对比前,先了解几个图片缓存通用的概念: (1) RequestManager:请求生成和管理模块 (2) Engine:引擎部分