最新消息:文章中包含代码时,请遵守代码高亮规范!

Glide与Picasso的对比【转载】

Android 王 伟 284浏览 0评论

Glide和Picasso都是非常优秀的加载图片框架。

一、使用方式

Picasso仅仅支持context,而Glide支持6种,分别是Context、Activity、FragmentActivity、Fragment(v4包下)、Fragment(app)以及View。Glide 在设计的时候,就有 Activity 和 Fragment 的生命周期。什么意思呢? 就是说你可以传递 Activity 或者 Fragment 的 context 给 Glide.with(), 然后 Glide 就会非常智能的同 Activity 的生命周期集成, 比如 OnResume 或者 onPause()。

Piacsso使用:

Picasso.with(context).load(url).centerCrop().placeholder(R.drawable.placeholder).error(R.drawable.error).into(mImageView);

Glide使用:

RequestOptions options = new RequestOptions().centerCrop().placeholder(R.drawable.placeholder).error(R.drawable.error);//可在其他处多次使用。</span>
Glide.with(context).load(url).apply(myOptions).into(mImageView);

二、缓存大小

Picasso是下载图片然后缓存完整的大小到本地,比如说图片的大小是1080p的,之后如果我需要同一张图片,就会返回这张 full size 的,如果我需要resize,也是对这种 full size 的做 resize。

Glide则是完全不一样的做法。Glide 是会先下载图片,然后改变图片的大小,以适应 imageView 的要求,然后缓存到本地。 所以如果你是下载同一张图片,但是设定两个不一样大小的 imageView, 那么Glide 实际上是会缓存两份。
换个角度来看,这里不仅仅是缓存的问题,比如一个 ImageView 要改变它的大小,PIcasso 就只需要下载一次 full size 的图片,但是 Glide 实际上就不仅仅是下载一次了,它需要去单独下载然后改变大小适配 imageView,因为对于 Glide 来讲,需要缓存不同大小的同一张图片。

三、内存使用

Glide 默认是用的 RGB_555 的设定,PIcasso 则是用的 ARGB _8888的设定。为了公平起见,我这里修改了 GlideModule,让 Glide 也使用 ARGB _8888的格式,做法也很简单,新建一个类然后继承 GlideModule:

<meta-data android:name="example.com.myanimation.GlideConfiguration" android:value="GlideModule"/>
public class GlideConfiguration implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        // Apply options to the builder here.
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }
    @Override
    public void registerComponents(Context context, Glide glide) {
        // register ModelLoaders here.
    }
}

可以看出 Glide (大约8MB) 要比 Picasso (13 MB) 的少不少。其实这里就体现出了之前提到的 Glide 缓存的方式问题。Picasso 是缓存的 full size 图片的大小,而 Glide 是加载已经改变大小后的图片,显而易见使用的memory会小很多。 这样可以减少 OutOfMemoryError 的可能性。

四、默认网络请求

Glide默认是使用httpurlconnection的,而Picasso默认有两种,在有使用okhttp3时使用okhttp,否则就是用使用httpurlconnection。

Glide支持okhttp3,但是必须要手动在Gradle中进行添加


compile "com.github.bumptech.glide:okhttp3-integrantion:4.0.0"

总结:

Glide和Picasso都不是完美的,从某些方面来说,Glide在图片的缓存上来说是比较不错的,因为它的速度比较快,另外,它也可以有效的防止OOM错误,而加载gif图片也是Glide的一大优势,但是默认情况下picasso的图片质量是很高的。

另外的一点小建议是,使用Glide的时候把图片的格式改为ARGB8888并且缓存全尺寸和其他尺寸的图片,这样使用可以让加载图片更好。

参考:http://www.jianshu.com/p/fc72001dc18d

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/22357.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Bob的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!