
图片框架优缺点整理(Fresco和Glide)
2018, May 18
在功能上,Picasso无法支持gif,在加载时会加载全尺寸的图片到内存,因为一般项目中都会有gif图的加载,所以暂时不考虑Picaso。不存在384和重复请求url的问题
Fresco
https://github.com/facebook/fresco
https://www.fresco-cn.org/
facebook
优点:
- Fresco会自动复用相同URL的缓存,两个相同URL同时进行请求Fresco也只会进行一次网络请求,然后第二个进行复用。
- Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
- 在5.0以下系统,Fresco将图片放到一个特别的内存区域。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。在更底层的Native层对OOM进行处理,图片将不再占用App的内存
- 支持渐进式的图片呈现
- 在加载gif图中,Fresco的java heap基本保持较低平稳状态,而Glide的java heap基本为Fresco的一倍。但是nativheap中Fresco高出很多
- 支持圆角图,(下载失败之后点击重新下载,自定义展位图,overlay或者进度条,指定用户按压时的overlay)
- 加载上:Fresco 的 image pipeline 设计,允许用户在多方面控制图片的加载:为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片。加载完成回调通知。对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图,缩放或者旋转图片,处理已下载的图片
问题: - 当Fresco加载384张图片以后,就无法显示出图片了。当activity销毁数值会释放的。
- Fresco依赖的库很多
- 布局依赖SimpleDraweeView控件
Glide
https://github.com/bumptech/glide
Google
优点:
- 除了支持gif和webP图片,还支持缩略图和video(可以将任何的本地视频解码成一张静态图片);
- 生命周期集成(根据Activity或者Fragment的生命周期管理图片加载请求;方便处理bitmap,比如 Paused状态在暂停加载,在Resumed的时候又自动重新加载。)
- 有高效的缓存策略,支持原始图片和结果图片的缓存,而Picasso和Fresco只会缓存原始尺寸的图片,由于不需要再次处理图片大小,加载比较快。
- 加载速度在静态图上是比Fresco快的,在内存上,javaheap内存开销比Fresco大,但是NATIVE HEAP上不大。
- Glide可以很容易的获取Bitmap
问题: - 相同URL的不同控件之间无法复用缓存。确认
- 在加载gif图时时间比较慢
- Glide没有文件缓存
- Glide加载的图片没有Picasso那么平滑
- Glide只有占位图
- 没有缓存进度
默认Bitmap格式是RGB_565
javaHeap —JAVA虚拟机
native heap – C/C++直接操纵的系统堆内存
直观数据对比,原图来自 https://blog.csdn.net/github_33304260/article/details/70213300
不带动画
对比项 | Glide | Fresco |
---|---|---|
max java heap | 11.1MB | 13.9MB |
max native heap | 43.8MB | 43.8MB |
avg wait time | 34ms | 44ms |
带动画
对比项 | Glide | Fresco |
---|---|---|
max java heap | 74.8.1MB | 36.1MB |
max native heap | 66.8MB | 545.3MB |
avg wait time | 33910ms | 15142ms |
来源:
https://blog.csdn.net/AIR_GRU/article/details/71081193
https://blog.csdn.net/github_33304260/article/details/70213300
https://blog.csdn.net/github_33304260/article/details/54140164