android优秀的图片加载库Glide

Glide的简介

在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。在开始之前我想说,Glide和Picasso有90%的相似度,准确的说,就是Picasso的克隆版本。但是在细节上还是有不少区别的。

  • 导入库

Picasso和Glide都在jcenter上。在项目中添加依赖非常简单:

  • Picasso

都是写在dependencies内

compile 'it.sephiroth.android.library.picasso:picasso:2.5.2.4b'
  • Glide
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:support-v4:25.1.0'

这里面要注意Glide需要依赖Support Library v4。

  • 使用
    就如我所说的Glide和Picasso非常相似,Glide加载图片的方法和Picasso如出一辙。
  • Picasso
Picasso.with(context)
    .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
    .into(ivImg);
  • Glide
Glide.with(context)
    .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
    .into(ivImg);

虽然两者看起来一样,但是Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。

这里写图片描述

同 时将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如 Paused状态在暂停加载,在Resumed的时候又自动重新加载。所以我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。

  • Glide加载图片默认Bitmap格式是RGB_565
    因为Glide加载图片的格式是RGB_565所以内存占用上会比ARGB_8888格式的内存开销要小一半。其实肉眼看的情况下个人觉得基本一致,没多大区别。如果你对默认的RGB_565效果还比较满意,可以不做任何事,但是如果你觉得难以接受,可以创建一个新的GlideModule将Bitmap格式转换到ARGB_8888:
package com.cc.loadimage;

import android.content.Context;

import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.module.GlideModule;

/**
 * Created by CC on 2017/2/4.
 */
public class GlideConfiguration implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }

    @Override
    public void registerComponents(Context context, Glide glide) {

    }
}

同时在AndroidManifest.xml中将GlideModule定义为meta-data

<meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration"
            android:value="GlideModule"/>

这样就使得Bitmap的格式为ARGB_8888,当然这样的话内存占用肯定比默认的RGB_565要大一些,不过还是会小于Picasso加载图片的内存占用。

  • 补充

  • Image质量的细节

    Glide加载的图片没有Picasso那么平滑,我还没有找到一个可以直观改变图片大小调整算法的方法,但这点很难察觉到,基本可以忽略不计。

  • 磁盘缓存
    在磁盘缓存上Picasso和Glide就很不同了,Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。

Picasso和Glide各有所长,你根据自己的需求选择合适的。对我而言,我更喜欢Glide,因为它远比Picasso快,虽然需要更大的空间来缓存。

  • 特性
    Glide可以做到几乎和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)

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

这里写图片描述

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

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

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

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

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

库的大小

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

总结

Glide和Picasso都是非常完美的库。Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少OutOfMemoryError的发生,GIF动画是Glide的杀手锏。不过Picasso的图片质量更高。

最后附上我写的Demo地址http://download.csdn.net/detail/qq_33792946/9748221

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值