你真的懂了Glide图片框架了吗?它来了,它来了,它带着资源走来了...

本文深入探讨Glide图片加载库,从源码角度理解其工作原理。讲解了Glide的生命周期集成、高效缓存策略及核心方法如with、load和into的实现。并提醒在使用中注意placeholder、override和fitCenter等方法的正确应用。
摘要由CSDN通过智能技术生成

简言:

       之前写过关于Glide的文章,都是一些如何使用的案例,比较注重使用了,没有考虑它的源码是如何实现的,今天为大家讲解一下源码,从源码的角度让你了解Glide这个神奇的图片框架。

1.Gilde 简介

在泰国举行的谷歌发布者论坛上,谷歌为我们介绍了一个叫Gilde的图片加载库,作者是bumptech。

这个库被广泛的运用在goole的开源项目中,包括2014年goole I/O大会上发布的官方app

2.使用gilde的优点:

1)使用简单

2)可支配度高,自适应程度高

3)支持常见图片格式 jpg png gif webp

4)支持多种数据源,网络,本地资源,assets等

5)高效缓存策略,支持Memory 和Disk图片缓存,默认bitmap格式采用RGB_565内存至少减少一半

6)生命周期集成,根据activity/Fragment生命周期自动管理请求

7)高效处理bitmap 使用bitmap pool使bitmap复用,主动调用recycle回收需要回收的bitmap,减少系统回收压力。

3.Glide的基本概念

Model它代表图片的数据源,例如URL,本地文件,然后通过ModelLoader从数据源中获取原始数据Data,在对原始数据Data进行Decoder解码,解码之后的资源Resource,并通过Transform进行图片的裁剪转换,转换之后的资源我们称之为TransformResource,转换之后我们还需要对图像进行Transcode转码操作,转码之后的资源我们就称之为TranscodedResource,最后将我们所显示的资源封装成Target,并进行显示。这就是Glide图片加载的整体流程,

4.通过源码进行分析

1)我们针对Glide3.7这个版本进行源码分析简介,这个版本相对于还是比较稳定的。

compile 'com.github.bumptech.glide:glide:3.7.0'

2)简单实用的代码:

    Glide
                .with(getApplicationContext())
                .load(url)
                .into(imageView);

我们几乎都会这么简单的使用了,这里没什么好讲的了,接下来我们看一下他复杂的使用,我们并对每一个属性进行讲解,我们看代码:

  Glide.with(getApplicationContext()) // 指定Context
                .load(url)// 指定图片的URL
                .placeholder(R.mipmap.ic_launcher)// 指定图片未成功加载前显示的图片
                .error(R.mipmap.ic_launcher)// 指定图片加载失败显示的图片
                .override(300, 300)//指定图片的尺寸
                .fitCenter()//指定图片缩放类型为
                .centerCrop()// 指定图片缩放类型为
                .skipMemoryCache(true)// 跳过内存缓存
                .diskCacheStrategy(DiskCacheStrategy.NONE)//跳过磁盘缓存
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)//仅仅只缓存原来的全分辨率的图像
                .diskCacheStrategy(DiskCacheStrategy.RESULT)//仅仅缓存最终的图像
                .diskCacheStrategy(DiskCacheStrategy.ALL)//缓存所有版本的图像
                .priority(Priority.HIGH)//指定优先级.Glide将会用他们作为一个准则,并尽可能的处理这些请求,但是它不能保证所有的图片都会按照所要求的顺序加载。优先级排序:IMMEDIATE > HIGH > NORMAL > LOW
                .into(imageView);//指定显示图片的Imageview

这里说个题外话,注意到我们with方法传递的上下文了吗?如果传入的是当前activity的上下文,或者传递的是getApplicationContext,他们分别代表什么?

当传入的是activity被销毁时,这个图片加载的生命周期也会被销毁,反之,如果山下文传递的是getApplicationContext时,只有程序被销毁时,图片加载的生命周期才会被销毁。

其它属性的配置在代码中已经做了标注,就不做过多的解释了,我们下边会对每一个参数进行源码分析,我们针对几个需要注意的点进行讲解一下:

1)placeholder这个方法:不要加载网络图片,加载本地图片,本身该方法主要解决网络慢时,指定的占位图,如果在加载网络图片,该方法就没有意义了,这里注意一下。

2)override这个方法主要解决的就是内存浪费,防止内存溢出泄露等。

3)fitCenter,c

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值