最近在stackoverflow看到android开发的几大图片框架的比较,感觉非常实用,故翻译惠存。
一、2015年4月10日:
1.作为图片加载框架,Picasso 与 ImageLoader易用性相同。Fresco 图片加载方式与其它框架相比不大一样,看起来更像是一种网络图片的获取、缓存最后显示的解决方案,而其它框架Picasso/ImageLoader/Glide 更常用于显示图片,当然它们也可以获取网络图片并缓存。
2.Glide 某种程度上可与Picasso相互替换。它们都使用了Picasso 的思想,即遵循HTTP规范,让服务器决定缓存策略,缓存全图然后根据需求调整大小。Glide 同样遵循HTTP规范,但它更倾向于缓存调整过大小的图片,图片格式使用RGB_565而不是RGB_8888, 达到占用更少的内存的目的。二者均有默认设定并支持全面的自定义。
3.至于哪个框架是最好还无法定论。Picasso,Glide和ImageLoader 均设置简单,易于使用,都是经得起考验的框架并受到人们喜爱。Picasso和Glide加载图片仅仅需要一行代码,并且都有加载中和加载失败的图片设置。自定义设置同样也很简便。ImageLoader虽出现时间较早,但与Picasso和Glide一样,设置和使用相当简单。所以选择这三者其中哪个框架,完全是看个人口味。至于Fresco,它是facebook出品的框架,出现时间较晚仍待考究。
4.三大著名框架我认为并没有太大差异。唯一不同的Fresco,由于它实现方式较为独特,年龄较小,仍有待测试。
二、2015年4月10日:
我是Fresco项目的工程师之一,所以我的回答是有偏向性的,但你并不需要完全接受我的意见。我们发布了一个逐一比较五个框架——Fresco,Picasso,UIL,Glide,Volley Image Loader的Demo项目,可以在GitHub上找到。
Fresco支持Maven Central,com.facebook.fresco:fresco。
Fresco拥有以下特性,这是Picasso,UIL,和Glide还没有的:
1.图片并不保存在java堆内存中,而保存在匿名共享内存子系统Ashemem(Anonymous Shared Memory)Heap中,中间字节缓冲区也存储在本机堆中。这留出了更多可用内存让应用使用,减少了出现OOM风险的概率。这同样减少了GC的工作量,使app有更好的表现。
2.JPEG图片可以渐变显示,就如同网页浏览器内显示一样。
3.图片能以任意一点为中心裁剪,而不只是中心。
4.JPEG图片可以自己调整大小,避免了缩小图片过程中出现OOM的问题。
其它特性见官方文档,但这些是最重要的。
三、2015年4月16日:
很难去比较这四者哪个较好,因为在许多方面,四者几乎都做了同样的事情,除了Fresco(它使用了许多新的内存优化方法),所以我根据自身经验列出了一些你可能想要对比的因素。由于Fresco使用最少,我可能会在继续使用和理解之后更新现在的回复。所谓的“曾经使用”是指至少在一个完整的app中使用上框架。
注:Fresco现在支持GIF和WebP 动画了。
外文地址:http://stackoverflow.com/questions/29363321/picasso-v-s-imageloader-v-s-fresco-vs-glide