Google推荐的图片加载库Glide介绍(与Picasso比较),android开发环境搭建的常见问题

本文对比了Google推荐的图片加载库Glide和Picasso,讨论了两者在内存管理、图片质量、磁盘缓存策略及特性的差异。Glide在自动计算ImageView大小和加载速度上具有优势,而Picasso则提供了灵活的图片调整选项。此外,Glide支持GIF和视频静态图加载,但可能消耗更多内存。总体来说,开发者可以根据项目需求选择适合的库。
摘要由CSDN通过智能技术生成

这里写图片描述

原因在于Picasso是加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。而Glide加载的大小和ImageView的大小是一致的,因此更小。当然,Picasso也可以指定加载的图片大小的:

Picasso.with(this)

.load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg”)

.resize(768, 432)

.into(ivImgPicasso);

但是问题在于你需要主动计算ImageView的大小,或者说你的ImageView大小是具体的值(而不是wrap_content),你也可以这样:

Picasso.with(this)

.load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg”)

.fit()

.centerCrop()

.into(ivImgPicasso);

现在Picasso的内存开销
就和Glide差不多了。

这里写图片描述

虽然内存开销差距不到,但是在这个问题上Glide完胜Picasso。因为Glide可以自动计算出任意情况下的ImageView大小。

  • Image质量的细节

这是将ImageView还原到真实大小时的比较。

这里写图片描述

你可以看到,Glide加载的图片没有Picasso那么平滑,我还没有找到一个可以直观改变图片大小调整算法的方法。

但是这并不算什么坏事,因为很难察觉。

  • 磁盘缓存

Picasso和Glide在磁盘缓存策略上有很大的不同。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。

这里写图片描述

上面提到的平滑度的问题依然存在,而且如果加载的是RGB565图片,那么缓存中的图片也是RGB565。

我 尝试将ImageView调整成不同大小,但不管大小如何Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存 一次。尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新尺寸的大小,然后将这个尺寸的也缓存起来。

具体说来就是:假如在第一个页面有一个200x200的ImageView,在第二个页面有一个100x100的ImageView,这两个ImageView本来是要显示同一张图片,却需要下载两次。

不过,你可以改变这种行为,让Glide既缓存全尺寸又缓存其他尺寸:

Glide.with(this)

.load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg”)

.diskCacheStrategy(DiskCacheStrategy.ALL)

.into(ivImgGlide);

下次在任何ImageView中加载图片的时候,全尺寸的图片将从缓存中取出,重新调整大小,然后缓存。

Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟,即便你添加了这段代码来让其立即显示:

//Picasso

.noFade();

这里写图片描述

Picasso和Glide各有所长,你根据自己的需求选择合适的。

对我而言,我更喜欢Glide,因为它远比Picasso快,虽然需要更大的空间来缓存。

  • 特性

你可以做到几乎和Picasso一样多的事情,代码也几乎一样。

Image Resizing

// Picasso

.resize(300, 200);

// Glide

.override(300, 200);

Center Cropping

// Picasso

.centerCrop();

// Glide

.centerCrop();

Transforming

// Picasso

.transform(new CircleTransform())

// Glide

.transform(new CircleTransform(context))

设置占位图或者加载错误图:

// Picasso

.placeholder(R.drawable.placeholder)

.error(R.drawable.imagenotfound)

// Glide

.placeholder(R.drawable.placeholder)

.error(R.drawable.imagenotfound)

几乎和Picasso一样,从Picasso转换到Glide对你来说就是小菜一碟。

  • 有什么Glide可以做而Picasso 做不到

Glide可以加载GIF动态图,而Picasso不能。

这里写图片描述

同时因为Glide和Activity/Fragment的生命周期是一致的,因此gif的动画也会自动的随着Activity/Fragment的状态暂停、重放。Glide 的缓存在gif这里也是一样,调整大小然后缓存。

但是从我的一次测试结果来看Glide 动画会消费太多的内存,因此谨慎使用。

除了gif动画之外,Glide还可以将任何的本地视频解码成一张静态图片。

还有一个特性是你可以配置图片显示的动画,而Picasso只有一种动画:fading in。

最后一个是可以使用thumbnail()产生一个你所加载图片的thumbnail。

其实还有一些特性,不过不是非常重要,比如将图像转换成字节数组等。

  • 配置

有许多可以配置的选项,比如大小,缓存的磁盘位置,最大缓存空间,位图格式等等。可以在这个页面查看这些配置 Configuration 。

  • 库的大小

Picasso (v2.5.1)的大小约118kb,而Glide (v3.5.2)的大小约430kb。

这里写图片描述

Anyway 312KB difference might not be that significant.

不过312kb的差距并不是很重要。

Picasso和Glide的方法个数分别是840和2678个。

😕/img-blog.csdn.net/20170829221139462?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhbmd4aWFvZ3VvMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

Anyway 312KB difference might not be that significant.

不过312kb的差距并不是很重要。

Picasso和Glide的方法个数分别是840和2678个。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值