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。
2.加载后图片质量不同
  • Picasso采用的ARGB-8888,Glide采用的是RGB-565,比ARGB_8888格式的内存开销要小一半。当然Glide也可以通过GlideModule设置格式。
  • 相对而言,Picasso加载的是全图,图片质量和清晰度要比Glide的要高,但是,因为加载的采样率过高,导致出现OOM异常的概率要比Glide要大很多.
3.加载Gif图片(备注:Gif图片消耗太多内存,尽量谨慎使用):
  • Picasso不能加载Gif图片
  • Glide可以加载Gif图片
4.缓存策略和加载速度.
  • Picasso缓存的是全尺寸,而 Glide的缓存的跟ImageView的尺寸相同.
  • 将ImageView调整为不同的大小,不管大小如何设置,Picasso只缓存一个全尺寸的图片,Glide会为每个大小的ImageView都缓存一张图片.
  • Glide的这个特点,让加载显得特别的快,而Picasso则因为需要在显示之前重新调整大小而导致一些延迟,(即便是添加了 noFade)
5.Picasso (v2.5.1)大小约为118KB,然而Glide (v3.5.2)的大小约为430KB。Picasso的方法数大约480,然而Glide的方法数约2678。
 
6.总结:
      总的来说二者极为相似,有着近乎相同的 API 风格,但 Glide 在缓存策略和加载 gif 方面略胜一筹
      Glide比Picasso加载速度要快,其实它是在Picasso的基础上进行了第二次封装,但是Glide比Picasso需要更多的空间来缓存;Glide加载图像以及磁盘缓存的方式,都优于Picasso,且Glide更有利于减少OutOfMemoryError的发生;

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
private SimpleTarget target = new SimpleTarget<Bitmap>() {
  @Override public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition) {
    imageView1.setImageBitmap( bitmap );
  }
};
private void loadImageSimpleTarget() {
  Glide.with( context ) // could be an issue!
  .load( eatFoodyImages[0] )
  .into( target );
}

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的更多相关文章

  1. Picasso,Glide,Fresco那个好?

    前言:在Android开发中,图片加载OOM一直困扰着很多开发者,在各种不合理的设计之下也容易导致图片加载OOM的问题,目前开源的比较常用的图片加载库也很多,比如老牌的UIL,Volley,AQuer ...

  2. Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别

    Universal-Image-Loader,android-Volley,Picasso.Fresco和Glide五大Android开源组件加载网络图片比较 在Android中的加载网络图片是一件十 ...

  3. Android图片载入框架最全解析(一),Glide的基本使用方法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...

  4. Android图片加载框架最全解析(一),Glide的基本用法

    现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还有 ...

  5. Glide和Picasso的区别

    首先简单的介绍下两个库的出身: Picasso是Square公司出品的一款非常优秀的开源图片加载库Glide是由Google开发,基于 Picasso,依然有保存了Picasso的简洁风格,但是在此做 ...

  6. Universal-ImageLoader,Picasso,Fresco,Glide对比

    Universal-ImageLoader:(估计由于HttpClient被Google放弃,作者就放弃维护这个框架)优点:1.支持下载进度监听2.可以在 View 滚动中暂停图片加载,通过 Paus ...

  7. 主流图片加载框架 ImageLoader、Glide、Picasso、Fresco 对比

    图片缓存库主页: Glidehttps://github.com/bumptech/glide fresco - An Android library for managing images and ...

  8. Android 图片加载库Glide 实战(二),占位符,缓存,转换自签名高级实战

    http://blog.csdn.net/sk719887916/article/details/40073747 请尊重原创 : skay <Android 图片加载库Glide 实战(一), ...

  9. Aandroid 图片加载库Glide 实战(一),初始,加载进阶到实践

    原文: http://blog.csdn.net/sk719887916/article/details/39989293 skay 初识Glide 为何使用 Glide? 有经验的 Android ...

随机推荐

  1. IDEA或Webstorm设置Ctrl+滚轮调整字体大小

    按Ctrl+Shift+A,出现搜索框 输入mouse: 点击打开这个设置:勾选 点击ok,之后就可以通过Ctrl+滚轮 调整字体大小了.

  2. toString()和toLocaleString()有什么区别

    偶然之间用到这两个方法 然后在数字转换成字符串的时候,并没有感觉这两个方法有什么区别,如下: 1 2 3 4 5 6 7 8 var e=123     e.toString() "123& ...

  3. Altium Designer 18 ------ 常用功能记录

    PCB选中某条线路,按一下 Tab 键选中整条线路 PCB中,按 “N” 键选择隐藏或显示某个网络 配置Altium Designer 18 教程所需的捕捉网格的值: G显示Snap Grid菜单,您 ...

  4. POE 供电

    受电设备(PD)和供电设备(PSE) 标准的五类网线有四对双绞线但是在10M BASE-T和100M BASE-T中只用到其中的两对.IEEE80 2.3af允许两种用法: 1.应用空闲脚供电时4.5 ...

  5. 学习Docker之Dockerfile的命令

    使用Dockerfile去构建镜像好比堆积木.使用pom去构建maven项目一样,有异曲同工之妙,下面就把Dockerfile中主要的命令介绍一下. 组成部分 部分 命令 基础镜像信息 FROM 维护 ...

  6. 被顶级学术期刊枪毙的p.Value到底是个什么鬼

    总结一下,在我看来,p.Value仅仅是在,假设检验,这理论框架下,对于证据力度的一个测量.而且,我们不大可能推翻假设检验这个框架,似乎也不必要,因为,这个框架非常合理,有广泛的应用场景,有强大的生命 ...

  7. sklearn-数据预处理scale

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  8. Servlet_问题总结

    1.Servlet转发到JSP后页面的CSS样式丢失,页面布局混乱,原来能点的链接现在失效 原因:原来前台页面(JSP|HTML)在引用静态资源(CSS|JS|JSP页面)时使用的是相对路径, 导致由 ...

  9. sp_change_users_login 'Update_One', '用户名', '登录名';

    每次从服务器上备份好数据库(Sql Server数据库),如果将备份数据库文件在本地恢复,总会产生用户权限的问题. 经过很多次的实验后,我发现有那么一条语句可以发挥作用,就是sp_change_use ...

  10. 4.工厂方法模式(Factory Method)

    耦合关系:       动机(Motivation):    在软件系统中,由于需求的变化,"这个对象的具体实现"经常面临着剧烈的变化,但它却有比较稳定的接口.    如何应对这种 ...