Glide 简介

一概要:

Google在2014的开发者论坛上,向我们介绍了一个开源的图片加载的类库Glide。作者BumpTech(碰撞科技)。这个

库被广泛的运用在了Google的开源项目中。

能够被Google如此推崇一定有其过人之处。研究一下发现picaso惊人的类似。所以干脆和Picaso做类比讲解。


二配置:

Glide:Glide需要依赖support-v4库。

    //使用glide
    compile 'com.github.bumptech.glide:glide:3.8.0'
    compile 'com.android.support:support-v4:23.3.0'
Picaso:
    compile 'com.squareup.picasso:picasso:2.5.2'


三使用:

简单使用:(加载一张图片)

Picasso:

        Picasso.with(context)
                .load("http://img1.imgtn.bdimg.com/it/u=1861947898,2677579279&fm=26&gp=0.jpg")
                .into(iv_content);

Glide:

        Glide.with(context)
                .load("http://img1.imgtn.bdimg.com/it/u=1861947898,2677579279&fm=26&gp=0.jpg")
                .into(iv_content);
#就如我们所说的Picasso与Glide非常的类似。但是Glide使用更方便,因为Glide.with参数不仅接受Context,还接受

Activity、Fragment。Glide会自动的从中获取Context。

#当Activity与Fragment作为Glide.with的参数时,Glide的图片加载会与它们的周期保持一致,(例如Activity)当Activity

Stop时,图片停止加载;当Resume时图片重新加载。


Gradle的默认的Bitmap格式是RGB_565

#Gradle默认的Bitmap格式是RGB_565,Picasso默认的Bitmap格式是ARGB_8888,所以Gradle与Picasso加载同尺寸

图片时内存开销小一半(RGB_565格式的Bitmap比ARGB_8888格式的Bitmap内存开销小一半),但是显示的图片质量

要比Picasso显示的图片差。

#如果你不满意Gradle默认Bitmap格式,我们可以自己定义加载的Bitmap格式:自定义GradleModule,然后在

AndroidManifest.xml中注册,最后在proguard.cfg中声明不被混淆。

1,自定义GlideModule

public class MyGlideModule implements GlideModule{

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //设置默认Bitmap的格式
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
        //设置内存缓存的策略
        builder.setMemoryCache(new LruResourceCache((int) (Runtime.getRuntime().maxMemory()/8)));
        //设置磁盘缓存的策略
        builder.setDiskCache(new InternalCacheDiskCacheFactory(context,"glide_cache", 1024 * 1024 * 50));
    }

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

    }
}

2,在AndroidManifes.xml中注册

        <meta-data
            android:name="com.example.songbinwang.littledemo.glide.MyGlideModule"
            android:value="GlideModule"></meta-data>
3,在proguard.cfg中声明不被混淆。

-keepnames class com.mypackage.MyGlideModule
# or more generally:
#-keep public class * implements com.bumptech.glide.module.GlideModule
#就算Glide把默认的Bitmap格式改成了ARGB_8888,但是Picasso的所耗的内存依然高于Glide。因为Picasso默认加载

全尺寸图片,而Glide默认加载与ImageView大小一样的图片。也就是说Glide默认对图片进行了压缩。

当然Picasso也是可以加载指定大小的图片(如果要适应ImageView,你必须提前计算好ImageView的大小):

        Picasso.with(this.getApplicationContext())
                .load("http://img0.imgtn.bdimg.com/it/u=1418485010,2783104222&fm=26&gp=0.jpg")
                .resize(768,432)
                .into(iv_picasso);
另一种方法相对简单,(前提是ImageView的大小是定值,不能是wrap_content)

        Picasso.with(this.getApplicationContext())
                .load("http://img0.imgtn.bdimg.com/it/u=1418485010,2783104222&fm=26&gp=0.jpg")
                .fit()
                .centerCrop()
                .into(iv_picasso);
这样操作后,Glide与Picasso的内存开销基本差不多了,但是在这个问题上Glide完胜Picasso,因为Glide可以计算

ImageView任何情况下的大小。


磁盘缓存

#首先Picasso只缓存全尺寸的图片,不管你之前怎么设置加载图片的大小;Glide则会为每一种大小的ImageView缓存相

同大小的图片,尽管一张图片已经缓存过一次,但是假如你要在另一个地方以不同的尺寸显示,需要重新下载,调整成新

尺寸的大小,然后将这个尺寸也缓存起来。

具体说就是:你在第一个页面有一个200x200的ImageView,在第二页面有一个100x100的ImageView,两个ImageView

显示的是同一张图片,却要下载两次。

但是Glide可以改变这种现象,让Glide即缓存全尺寸的图片,也缓存其他尺寸的图片。

        Glide.with(this)
                .load("http://img0.imgtn.bdimg.com/it/u=1418485010,2783104222&fm=26&gp=0.jpg")
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(iv_glide);
下载在任何ImageView再加载这张图片时,会从缓存中加载这张全尺寸图片,重新调大小,然后缓存。

Glide的这种方式显示图片非常快,Picasso则因为每次加载图片都需要重新调整大小导致一些延迟。及时你添加了(noFade())

#因为Glide缓存策略导致Glide缓存图片会过于频繁。因此Glide需要更大的空间来缓存。


Glide能做到,Picasso做不到的。

#Glide能够在gif格式的图片,而Picasso不能。因为Glide与Activity、Fragment的生命周期一样。所以在Activity stop时Gif

也会停止,Activity Resume时Gif重新启动。尽管如此Glide加载Gif依然会消耗很多内存。

#Glide能够将任何的本地视频解码成一张静态图片。

#Glide可以配置图片的显示动画,而Picasso只有一种动画:fading in。

        Glide.with(this)
                .load("http://img0.imgtn.bdimg.com/it/u=1418485010,2783104222&fm=26&gp=0.jpg")
                .crossFade(android.R.anim.fade_in, 300)//可以换成自定义的动画
                .into(iv_glide);
#支持缩略图, thumbnail( float ratio ), ratio为缩略图与要加载的图片的的比例,ratio属于(0,1)。

        Glide.with(this)
                .load("http://img0.imgtn.bdimg.com/it/u=1418485010,2783104222&fm=26&gp=0.jpg")
                .thumbnail(0.1f)//缩略图为要加载图片的1/10。
                .into(iv_glide);

四总结:Glide与Picasso都是非常完美的库,Glide加载图片与磁盘缓存的方式都优于Picasso。速度更快,更有利于减少

OutOfMemory,Gif是Glide的杀手锏。Picasso加载的图片质量更高。

参考:

1,http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0327/2650.html

2,https://muzhi1991.gitbooks.io/android-glide-wiki/content/chapter1.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值