美文网首页
Glide4.7解析

Glide4.7解析

作者: fancy1234 | 来源:发表于2019-05-27 13:12 被阅读0次

    Glide特点

          为什么要使用glide呢,他总是有自己的优势的,官方有自己的介绍,我这里写写自己的体会:

         1 集成简单,使用起来也很简单,几行代码搞定。

         2 支持多种格式的图片,png,jpeg,jpg,webp,并且支持多个来源,文件,网络,本地。

         3 它集成了activity,fragment的生命周期,实现了自动管理。相对于picasso这点要好一些。

         4 高效的缓存和硬盘本地存储效率。

     使用方法

             glide使用比较简单,可以直接在activity,fragment,fragmentactivity中,与picasso类似,如果只是简单的加载图片,不做其他处理,glide只需要一行代码就搞定:

            //url表示加载图片地址,first表示的是显示图片的imageview

           Glide.with(this).load(url).into(first);

            其中this,可以代表Activity,Fragment,Fragment,也可是Context等,我们可以看下这个函数的重载情况,with函数如果传入的是fragment或者activity,那么整个加载流程会与activity/fragment的生命周期绑定,比如onpause就会停止加载,onResumed的时候就重新加载。

    通过RequestOption设置属性

        通过设置RequestOptions可以设置加载图片的各个属性值,比如占位符号或者容错图片,指定加载尺寸,

    通过如下代码的方式设置requestOptions

    Glide.with(this).load(firstUrl).apply(requestOptions).into(first);

    图片缓存

            内存缓存:为了实现图片的快速加载,Glide帮我们实现了图片缓存功能,如果不需要可以调用skipMemoryCache(true)告诉Glide跳过内存缓存。注意:该方法只对内存缓存有影响

           磁盘缓存:由于手机内存使用有线,内存资源比较珍贵,不能将所有的图片资源缓存到内存中,因此为了提高效率,Glide还采用了磁盘缓存的方式。磁盘缓存有四种方式DiskCacheStrategy.NONE:取消图片的磁盘缓存。DiskCacheStrategy.ALL:缓存所有版本的图像。DiskCacheStrategy.DATA:只缓存原来分辨率的图片。DiskCacheStrategy.RESOURCE:只缓存最终的图片。

    从调用流程入手进行分析

    1.调用with()静态方法

           Glide类本身是一个单例模式,调用with(context)去实例化Glide并返回RequestManager对象,供后面使用。静态with(context)是一个重载方法,参数可以是context,activity,fragment,view,FragmentActivity这五种,调用此方法返回了一个RequestManager对象

    2.通过RequestManager类管理Request请求

    RequestManager类是实现Glide加载资源的管理类,根据activity生命周期管控资源家在请求,可以开启,暂停和重启。通过调用load重载方法创建一个RequestBuilder,去加载资源

            其中,asDrawable方法主要是设置加载的资源最终以Drawable对象返回,默认情况下Glide加载资源是以Drawable对象返回的,目前Glide支持返回Drawable,Bitmap,gif和file四种,在不想使用默认的drawable返回的情况下可以在调用load前用对象的方法,比如bitmap对象asBitmap();

    3.通过RequestOptions来实现各种选项设置

           通过上述步骤2返回的requestBuilder对象后,后续的加载资源以及一些设置requestBuilder类中实现。在V4版本中,Glide将一些选项设置模块划分出来,放在RequestOptions类中,其中包括占位图,错误图,缓存机制(包括内存缓存和磁盘缓存),关机动画等等,在调用apply()方法时传入RequestOptions对象

    获取到当前的RequestOptions对象后,通过调用对象的apply方法,将上传的requestOptions对象传入并保持设置,方便后续跳龙,同时返回新的RequestOptions对象复制给this.requestOptions变量。

    4.调用RequestBuilder类中into()方法实现资源加载并设置到目标target中

    前面几点讲述了资源家在之前的基础设置以及选项设置,最终调用info实现资源的加载。into方法是个重载类,最终几个方法都会进入到into( Y target,RequestListener<TranscodeType> targetListener,RequestOptions options)中

    into方法中主要做了一下两个方面的事情

    第一:通过buildRequest()方法构建一个Request

    第二:获取target的Request对象,与构建的Request对象进行比较,并检测是否采用缓存及target的上次请求是否完成。如果两个对象相等,并且options采用了缓存或target的上次请求未完成,则构建的request进行回收,并且判断target是否正在运行,如果正在运行则直接返回target,如果未运行则调用Request的begin方法启动同步加载资源请求。如果两个对象不等,或者options没有使用缓存机制和target的请求已经完成,清除target之前的设置,并将新构建的request对象设置给target,通过track方法启动Request请求

    上述条用了load后内部是通过asDrawable设置资源返回类型,并返回一个RequestBuilder对象,然后调用RequestBuilder的方法load()加载

    相关文章

      网友评论

          本文标题:Glide4.7解析

          本文链接:https://www.haomeiwen.com/subject/cythtctx.html