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 ...
随机推荐
- 做错的题目——给Array附加属性
- pickle详解
一.简介 在机器学习中,我们常常需要把训练好的模型存储起来,这样在进行决策时直接将模型读出,而不需要重新训练模型,这样就大大节约了时间 Python提供的pickle模块就很好地解决了这个问题,它可以 ...
- java多线程api
Object类相关api(相关的方法一定是当前线程在获取了对应的锁对象才能调用,否则会抛出异常) o.wait() :锁对象调用该方法使当前线程进入等待状态,并立刻释放锁对象,直到被其他线程唤醒进入等 ...
- 网络编程基础【day10】:操作系统介绍
一.为什么要有操作系统 现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成. 一般而言,现代计算机系统是一个复杂的系统. 其一:如果每位 ...
- java io系列04之 管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例
本章,我们对java 管道进行学习. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_04.html java 管道介绍 在java中,PipedOu ...
- Ubuntu 18.04 设置开机启动脚本 rc.local systemd
ubuntu18.04不再使用initd管理系统,改用systemd. ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.l ...
- Tomcat、Weblogic、WebSphere、JBoss服务器的选择
一.应用点 Tomcat是Apache基金会提供的Servlet容器,它支持JSP, Servlet和JDBC等J2EE关键技术,所以用户可以用Tomcat开发基于数据库,Servlet和JSP页面的 ...
- HDU 6375(双端队列 ~)
题意是有至多150000个双端队列,400000次简单操作,直接开会导致内存超限,所以用 STL 中的 map 和 deque ,而读入过大已经在题目中有所说明,直接用已经给出的快速读入即可.要注意的 ...
- oldboy s21day05
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.请将列表中的每个元素通过 "_" 链接起来.'''users = ['李少奇','李 ...
- Java入门系列 Java 中的四种引用
Why java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象. java对象的引用包括强引用,软引用,弱引用,虚引用 Java中提供这四种引用类型 ...