Fresco,Glide,Picasso
1.Picasso和Glide的with后面的参数不同
- Picasso.with(这里只能传入上下文) .
- Glide.with,后面可以传入上下文,Application实例,Activity实例,FragmentActivity实例,Fragement实例,View实例。传入的对象要比前者多。Context会自动的从它们获取。同时将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如Pause状态会自动暂停加载,Resume的时候又自动重新加载。所以建议传递Activity 和 Fragment给Glide,而不是Context。
- Picasso采用的ARGB-8888,Glide采用的是RGB-565,比ARGB_8888格式的内存开销要小一半。当然Glide也可以通过GlideModule设置格式。
- 相对而言,Picasso加载的是全图,图片质量和清晰度要比Glide的要高,但是,因为加载的采样率过高,导致出现OOM异常的概率要比Glide要大很多.
- Picasso不能加载Gif图片
- Glide可以加载Gif图片
- Picasso缓存的是全尺寸,而 Glide的缓存的跟ImageView的尺寸相同.
- 将ImageView调整为不同的大小,不管大小如何设置,Picasso只缓存一个全尺寸的图片,Glide会为每个大小的ImageView都缓存一张图片.
- Glide的这个特点,让加载显得特别的快,而Picasso则因为需要在显示之前重新调整大小而导致一些延迟,(即便是添加了 noFade)
Glide中的大部分设置项都可以通过 RequestOptions 类和 apply() 方法来应用到程序中。
RequestOptions options = new RequestOptions()
.placeholder(R.mipmap.ic_launcher) //加载成功之前占位图
.error(R.mipmap.ic_launcher) //加载错误之后的错误图
.override(400,400) //指定图片的尺寸
//指定图片的缩放类型为fitCenter (等比例缩放图片,宽或者高等于ImageView的宽或高。)
.fitCenter()
//指定图片的缩放类型为centerCrop (等比例缩放图片,直到图片的宽高都大于等于ImageView的宽度,然后截取中间的显示。)
.centerCrop()
.circleCrop()//指定图片的缩放类型为centerCrop (圆形)
.skipMemoryCache(true) //跳过内存缓存
.diskCacheStrategy(DiskCacheStrategy.ALL) //缓存所有版本的图像
.diskCacheStrategy(DiskCacheStrategy.NONE) //跳过磁盘缓存
.diskCacheStrategy(DiskCacheStrategy.DATA) //只缓存原来分辨率的图片
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) //只缓存最终的图片
;
Glide.with(this)
.load(url)
.apply(options)
.into(imageView);
清除缓存
Glide.get(this).clearDiskCache();//IO操作,不能在UI线程里跑,得另开一个线程。
Glide.get(this).clearMemory();//只能在主线程里跑
得到bitmap
Glide高级用法: https://www.jianshu.com/p/cfb3d467687d
https://www.cnblogs.com/whoislcj/p/5558168.html
https://www.jianshu.com/p/c3a5518b58b2
集以上二者之长的Fresco
Fresco 中设计有一个叫做Image Pipeline的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级磁盘)。
Fresco中设计有一个叫做Drawees模块,它会在图片加载完成前显示占位图,加载成功后自动替换为目标图片。当图片不再显示在屏幕上时,它会及时地释放内存和空间占用。
Fresco 特性:
·内存管理
解压后的图片,即Android中的Bitmap,占用大量的内存。大的内存占用势必引发更加频繁的GC。在5.0以下,GC将会显著地引发界面卡顿。
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。
Fresco 在低端机器上表现一样出色,你再也不用因图片内存占用而思前想后。
·图片绘制
Fresco 的 Drawees 设计,带来一些有用的特性:
1.自定义居中焦点
2.圆角图,当然圆圈也行
3.下载失败之后,点击重现下载
4.自定义占位图,自定义overlay, 或者进度条
5.指定用户按压时的overlay
·图片加载
Fresco的Image Pipeline允许你用很多种方式来自定义图片加载过程,比如:
1.为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片
2.先显示一个低清晰度的图片,等高清图下载完之后再显示高清图(渐进式呈现)
3.加载完成回调通知
4.对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图
5.缩放或者旋转图片
6.对已下载的图片再次处理
7.支持WebP解码,即使在早先对WebP支持不完善的Android系统上也能正常使用!
·动图加载
加载Gif图和WebP动图在任何一个Android开发者眼里看来都是一件非常头疼的事情。每一帧都是一张很大的Bitmap,每一个动画都有很多帧。Fresco让你没有这些烦恼,它处理好每一帧并管理好你的内存。
·图片的渐进式呈现
渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。
说了那么多总之Fresco就是吊!
最后,进行总结一下
Picasso 所能实现的功能 Glide 都能做到,只是所需设置不同。两者的区别是 Picasso 比 Glide 体积小很多且图像质量比 Glide 高,但Glide 的速度比 Picasso 更快,Glide 的长处是处理大型的图片流,如 gif、video,如果要制作视频类应用,Glide 当为首选。
Fresco 可以说是综合了之前图片加载库的优点,其在5.0以下的内存优化非常好,但它的不足是体积太大,按体积进行比较:Fresco>Glide>Picasso,所以 Fresco 在图片较多的应用中更能凸显其价值,如果应用没有太多图片需求,还是不推荐使用 Fresco。
内存缓存和硬盘缓存分别的作用
一个完善的图片加载框架一般都包含内存缓存和硬盘缓存两种缓存策略。他们的作用各不相同,内存缓存主要是防止应用重复的把数据读到内存中,而硬盘缓存主要是防止应用重复的去网络上下载图片。这样才能让框架加载图片的速度更快,也能更省流量。
Glide的内存缓存机制:LruCache算法 + WeakReference弱引用
代码示例使用讲解:
Picasso,Glide,Fresco以及UIL使用经验的整理: https://www.jianshu.com/p/93198a80bda7
Glide缓存机制代码解析(了解):https://blog.csdn.net/mingyunxiaohai/article/details/80174923
Glide的缓存策略的配置使用(掌握):https://blog.csdn.net/shangming150/article/details/77839016
Picasso的使用示例: https://www.cnblogs.com/kim-liu/p/7457033.html
Picasso加载图片的内存优化实践:https://blog.csdn.net/ashqal/article/details/48005833
Fresco,Glide,Picasso的更多相关文章
- Picasso,Glide,Fresco那个好?
前言:在Android开发中,图片加载OOM一直困扰着很多开发者,在各种不合理的设计之下也容易导致图片加载OOM的问题,目前开源的比较常用的图片加载库也很多,比如老牌的UIL,Volley,AQuer ...
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别
Universal-Image-Loader,android-Volley,Picasso.Fresco和Glide五大Android开源组件加载网络图片比较 在Android中的加载网络图片是一件十 ...
- Android图片载入框架最全解析(一),Glide的基本使用方法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...
- Android图片加载框架最全解析(一),Glide的基本用法
现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还有 ...
- Glide和Picasso的区别
首先简单的介绍下两个库的出身: Picasso是Square公司出品的一款非常优秀的开源图片加载库Glide是由Google开发,基于 Picasso,依然有保存了Picasso的简洁风格,但是在此做 ...
- Universal-ImageLoader,Picasso,Fresco,Glide对比
Universal-ImageLoader:(估计由于HttpClient被Google放弃,作者就放弃维护这个框架)优点:1.支持下载进度监听2.可以在 View 滚动中暂停图片加载,通过 Paus ...
- 主流图片加载框架 ImageLoader、Glide、Picasso、Fresco 对比
图片缓存库主页: Glidehttps://github.com/bumptech/glide fresco - An Android library for managing images and ...
- Android 图片加载库Glide 实战(二),占位符,缓存,转换自签名高级实战
http://blog.csdn.net/sk719887916/article/details/40073747 请尊重原创 : skay <Android 图片加载库Glide 实战(一), ...
- Aandroid 图片加载库Glide 实战(一),初始,加载进阶到实践
原文: http://blog.csdn.net/sk719887916/article/details/39989293 skay 初识Glide 为何使用 Glide? 有经验的 Android ...
随机推荐
- Proxy代理模式
https://www.cnblogs.com/vincentzh/p/5988145.html https://www.cnblogs.com/wrbxdj/p/5267370.html(不错)
- JS(基础)_总结获取页面中元素和节点的方式
一.前言 1.元素和节点的区别 2.总结获取元素的方式 3.总结获取节点的方式 二.主要内容 1.结点和元素的区别 (1)一些常见基本概念: 文档:document 元素:页面中所有的标签 结点:页面 ...
- qml: QtChart横纵轴label设置;
在qml中,使用ChartView作为图表展示区域, 但是并没有给定接口用来设置xlabel,ylabel. 没得办法,只能采用笨方案: (我的方法如下) import QtQuick 2.0 imp ...
- python字典练习题
python字典练习题 写代码:有如下字典按照要求实现每一个功能dict = {"k1":"v1","k2":"v2", ...
- python 面向对象(五)约束 异常处理 MD5 日志处理
###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...
- Linux记录-jstack采集namenode堆栈信息
#!/bin/bash #以hdfs用户执行jstack每分钟采集一次namenode heapstack日志 #mkdir -p /tmp/jstack export JAVA_HOME=/app/ ...
- ruby--Hash方法汇总
一.给Hash添加默认值 :h = {1,2,3,4} #=> {1 => 2, 3 => 4} h.default = 7 h[1] ...
- 加密PDF文件的打印问题
工作中遇到网上下载的PDF文件加密,并且不能打印 解决方法: 1.解密: 去网站下载解密软件,1M左右:http://www.onlinedown.net/soft/19939.htm 直接解压,运行 ...
- weblogic每天日志合并shell脚本 [个人记录]【转】【补】
from RogerZhu modified by King sh logback.rb "/data/logs/" "/tmp/domain" "a ...
- 2016vijos 1-1 兔子的字符串(后缀数组 + 二分 + 哈希)
题意: 给出一个字符串,至多将其划分为n部分,每一部分取出字典序最大的子串ci,最小化 最大的ci 先看一个简化版的问题: 给一个串s,再给一个s的子串t,问能否通过将串划分为k个部分,使t成为划分后 ...