Glide - Picasso - Fresco

  • 对比Glide 和 Picasso
    https://www.jianshu.com/p/fc72001dc18d【简洁版】
    https://blog.csdn.net/github_33304260/article/details/54140164
    https://microstudent.github.io/2017/01/07/Glide-And-Picasso/【生命周期】

  • Glide 和 Fresco对比分析
    https://blog.csdn.net/github_33304260/article/details/70213300
    https://www.imooc.com/article/73920?block_id=tuijian_wz

    Glide - Picasso - Fresco_第1张图片
    Picasso Glide Fresco 对比图.png

  • Glide
    Picasso是【网络】加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。而Glide加载的大小和ImageView的大小是一致的,因此更小。当然,Picasso 也是可以指定加载图片大小的,但是问题在于你需要主动计算 ImageView 的大小,或者说你的 ImageView 大小是具体的值(而不是 wrap_content )【如果这样,Picasso的内存开销就和Glide差不多了】,在加载图片这个问题上 Glide 完胜 Picasso,因为 Glide 可以自动计算出任意情况下的 ImageView 大小。Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。

    【对于Glide来说,他会首先计算ImageView的大小,下载完图片后对图片进行重绘,而不是直接将图片加载到内存。而对于Picasso来说,他的策略是下载完图片后,加载原图进内存缓存,如果需要resize再根据这原图进行resize放进ImageView中。】

    图片加载会和Activity/Fragment的生命周期保持一致,比如 Paused状态在暂停加载,在Resumed的时候又自动重新加载。所以建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。同时因为Glide和Activity/Fragment的生命周期是一致的,因此gif的动画也会自动的随着Activity/Fragment的状态暂停、重放。Glide 的缓存在gif这里也是一样,调整大小然后缓存。

    Picasso本身不实现磁盘缓存,我们需要通过配置Okhttp来实现缓存,而这依赖于Http的响应头或者请求头,对服务器有要求,亦或是我们需要自己修改请求头。而Glide默认实现了磁盘缓存,同时还有BitmapPool作为重用池,对于一个废弃的bitmap,GLide会把它放进BitmapPool,用以重用。

    Glide加载的图片质量要差于Picasso,因为Glide默认的Bitmap格式是RGB_565 【一个像素点占32位】,比ARGB_8888【一个像素点占16位】格式的内存开销要小一半。

    【diskCacheStrategy(DiskCacheStrategy.ALL)】可以通过代码让Glide既缓存全尺寸又缓存其他尺寸,这样就使得下次在任何 ImageView 中加载图片的时候,全尺寸的图片将从缓存中取出,重新调整大小,然后缓存。

    对于图片的加载,对于顶部的图片可能需要优先加载,而对于底部的图片我们希望最后加载,那么Glide也能够让我们为每次加载配置优先级priority。

  • Fresco
    Fresco 的最大亮点在于它的内存管理。解压后的图片,即 Android 中的 Bitmap ,占用大量的内存,在 Android 5.0以下系统中,这会显著地引发界面卡顿。而使用 Fresco 将很好地解决这个问题,Fresco将图片存储在系统的匿名共享内存,而不是虚拟机的堆内存中,图片的中间缓冲数据也存放在本地堆内存,当图片不再显示的时候,占用的内存会自动被释放。所以, 应用程序有更多的内存使用, 不会因为图片加载而导致 OOM,同时也减少垃圾回收器频繁调用回收 Bitmap 导致的界面卡顿,性能更高。当 APP 包含的图片较多时,这个效果尤其明显。

    Fresco 支持图像的渐进式呈现,渐进式的图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,逐渐呈现清晰的图片,这在低网速情况下浏览图片十分有帮助,可以带来更好地用户体验。

    JPEG 图片改变大小也是在 native 进行的,不是在虚拟机的堆内存,同样减少 OOM。

    Fresco要获取bitmap更加复杂, 而且使用起来也并不是那么顺畅,不能像Glide那样把bitmap 对象取出来传递给其它地方使用, 只能在Fresco提供的作用域范围内使用。 Fresco虽然很强大,但是包很大,依赖很多,使用复杂,而且还要在布局使用SimpleDraweeView控件加载图片。

你可能感兴趣的:(Glide - Picasso - Fresco)