前言:在Android开发中,图片加载OOM一直困扰着很多开发者,在各种不合理的设计之下也容易导致图片加载OOM的问题,目前开源的比较常用的图片加载库也很多,比如老牌的UIL,Volley,AQuery还有比较优秀的Picasso,Glide,Fresco等.
本文仅简单地比较Fresco&Glide&Picasoo,如有错误还请斧正.

Picasso

由Square公司开源的一款图片加载和缓存的库,不过Picasso不支持磁盘缓存.也就是说如果想要做磁盘缓存的话需要另外想办法.(可以利用JakeWharton/DiskLruCache)

Glide

一款和Picasso类似的图片加载和缓存的开源库.虽然在函数定义和调用上和Picasso相差无几,但是Glide确实在性能方面比Picasso要好,值得注意的是Glide库仅支持Android 2.3.3及以上的版本.(PS:目前市面上貌似也很少看到Android 4.1以下的机型了,所以版本向下兼容可以不用担心.)

关于Glide和Picasso的比较文章推荐:
Introduction to Glide, Image Loader Library for Android, recommended by Google

Fresco

一款由Facebook今年推出的一个强大的图片加载库,Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。Fresco 支持 Android2.3(API level 9) 及其以上系统。(摘自:http://fresco-cn.org/)
有关Fresco的使用教程请绕道:http://fresco-cn.org/docs/index.html#_

Fresco相比其他图片库如Picasso,UIL,Glide相比,所具有的最重要的几个独有特性:

  • 在Android 5.0以下系统,图片不存储在Java heap,而是存储在ashmemheap,中间的字节buffer同样位于native heap。使应用有更多内存空间,降低OOM风险,减少GC次数。
    渐进式的JPEG呈现。
  • 图片可以在任意点进行裁剪,而不是中心,即自定义居中焦点。
  • JPEG可以在native进行resize,避免了在缩小图片时的OOM风险。
  • 支持Gif和WebP。

Fresco&Glide&Picasso 比较

Facebook也提供了,关于Fresco和其他图片加载器的比较例子.下载地址:Fresco

加载本地图片:

由于图片数量比较少,很难看出差别,不过可以发现,在一般的情况下,Fresco和Glide在内存占用上,Fresco更优,这是由于Fresco将图片放置到一块特殊的Native内存,这块内存的管理是由Fresco进行的,所以Fresco的体积比较庞大,会为应用增加接近2M的体积,这算是Fresco的一个缺点.

加载网络图片: 

在加载网络图片时,由于机型和网络环境不同,可能也会导致现实的数据有问题,不过在比较的时候,可以发现,Fresco在加载网络图片时,刚开始Heap内存占用也是58M左右,不过随着时间的推移,Heap内存占用的值会变大,可能是由于Fresco内存释放存在问题导致的.可见Fresco虽然在加载图片上独辟蹊径但是并没有传说中那么完美.

图片加载库的选择

根据自己平时在项目中的体会,在综合包的大小及图片加载器的稳定性后觉得Glide是比较适合用在产品中的图片加载库.
选择的原因如下:

  1. Glide默认提供配置支持本地图片缓存,缓存的机制是DiskLruCache.可以根据自己的需要,自定义图片缓存的路径.所以在考虑节省用户流量来看可以不考虑Picasso;
  2. 虽然Fresco也提供更强大的图片缓存和加载机制,不过在比较之后,感觉Fresco还是有待完善.Glide可以很简单的获取网络图片的Bitmap对象,而Fresco需要通过订阅数据源克隆Bitmap对象的引用才能存储值.操作方式不够简洁和友好.
  3. Fresco的库文件中,以最新的0.8.1为例,imagepipeline-0.8.1.aar光包得大小就有3.5M ,而Glide包的大小为465K为了让Apk包得体积更小,所以考虑使用Glide.
推荐:Android中实用的Gradle配置http://www.apkbus.com/blog-705730-61441.html

Picasso,Glide,Fresco那个好?的更多相关文章

  1. Android四大图片缓存(Imageloader,Picasso,Glide,Fresco)原理、特性对比

    四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用. Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所 ...

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

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

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

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

  4. Picasso, ImageLoader, Fresco, Glide 优劣

    Fresco:是Facebook 在今年上半年开源的图片缓存优点:1. 图片存储在安卓系统的匿名共享内存, 而不是虚拟机的堆内存中, 图片的中间缓冲数据也存放在本地堆内存,所以, 应用程序有更多的内存 ...

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

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

  6. Glide Picasso和Fresco的对比

    比较Picasso.Glide 和 Fresco 三种图片加载库 比较 Picasso 与 Glide 总体来说二者极为相似,有着近乎相同的 API 的使用风格,但 Glide 在缓存策略和加载 gi ...

  7. Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide

    一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ...

  8. Fresco,Glide,Picasso

    1.Picasso和Glide的with后面的参数不同 Picasso.with(这里只能传入上下文)     . Glide.with,后面可以传入上下文,Application实例,Activit ...

  9. Android高级工程师面试实战,您会挂么?

    xxx公司面试总结 面试形势 群聊(2个面试官+HR+自己) 面试流程 自我介绍 面试官根据你的介绍开始问 你对我们公司有什么想了解的么(复活卡,要时回到没有了也就没有了,可以让面试官给自己提一下建议 ...

随机推荐

  1. leetcode 【 Best Time to Buy and Sell Stock II 】python 实现

    题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  2. php字符串 函数

    strtolower()//字符串转化小写的字母 $str="abcdEfG";$s=strtolower($str); 输出:abcdefg; strtoupper();字符串转 ...

  3. c++ primer plus 第6版 部分三 9章 - 章

    c++ primer plus 第6版                                               部分三 9章 - 章 第9章   内存模型和名称空间 1.单独编译 ...

  4. 精通CSS高级Web标准解决方案(6、对表单与表格应用样式)

    使用fieldset input[type="text"] { width:200px; } input:focus,textarea:focus{background:#ffc; ...

  5. [oldboy-django][6其他]微信二维码扫码登录注册

    http://blog.csdn.net/maerdym/article/details/46380309 http://blog.csdn.net/jiang1013nan/article/deta ...

  6. SQL Server 2014存储过程的备份和还原

    Sql Server 2014存储过程备份和恢复... 1 1.      备份存储过程:... 1 2.      还原... 8 Sql Server 2014存储过程备份和恢复 1. 备份存储过 ...

  7. File IO(NIO.2):路径类 和 路径操作

    路径类 Java SE 7版本中引入的Path类是java.nio.file包的主要入口点之一.如果您的应用程序使用文件I / O,您将需要了解此类的强大功能. 版本注意:如果您有使用java.io. ...

  8. nginx访问控制allow、deny(ngx_http_access_module)

    单看nginx模块名ngx_http_access_module,很多人一定很陌生,但是deny和allow相比没一个人不知道的,实际上deny和allow指令属于ngx_http_access_mo ...

  9. jQuery操作DOM基础 - 元素属性的查看与设置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 平滑升级nginx

    平滑升级nginx版本技术文档 作者 联系方式 日期 版本号 马坤 852115346@qq.com 2017-12-31 V1.0.0 备注:作者水平有限,难免出现错误.如若发现错误,请您及时与作者 ...