Glide面试怎么说

Glide十分庞大,在面试上不可能都能说的出来,我这里提供一个总体思路,然后按照这个总体思路来回答,相信会对你面试会有帮助。
任何一个与网络相关的框架都逃不出三步。
1、关于请求的管理。
2、关于请求的封装和执行请求。
3、对请求数据的处理。
Glide也不例外,下面我从这三个方面来解析Glide源码。
首先给出Glide的用法。

Glide.with(context).load("http://test.yungeshidai.com/material/40/c2b72f29feb59d86073fd95fb3185a1c.jpg").into(imageView);

对请求管理者的封装
Glide.with(context)会返回一个RequestManager 对象,听这个名字就知道是管理Request的,管理它何时请求,何时暂停,何时销毁。这里的Context包含两种,一种是Application类型的,另外一种是非Application。如果Context是Activity,则会根据Activity的生命周期来发起请求或者暂停或者移除,Glide本身无法感应Activity的生命周期,Glide采用的是新建一个空的Fragment和Activity绑定,通过空的Fragment获取Activity的生命周期,来处理和是暂停和何时移除的操作。如果Context是Application,就简单很多了,不用费劲的去感应生命周期去停止请求了。

load("")有很多重载方法,这里分析一下String类型,load返回DrawableTypeRequest对象,这个对象的主要作用是封装Request请求的所需要的参数,可以添加加载等待图片、加载失败占位图、是否启用缓存等。DrawableTypeRequest里面有特别重要的属性,FixedLoaderProvider类,里面会有一个modelloader 用于获取原数据,transcoder 用于图片的转码 DataLoaderProvider 用于图片的编解码。

into(imageView) 是由DarwableTypeRequest 的父类DrawableRequestBuilder的into方法,最终到GenericRequestBuilder的into方法,在这里面首先将Imageview转换成Target对象,接着调用into方法。
into(target) 方法主要干两件事,第一件组装request对象。
第二件执行这个request对象。
在DrawableTypeRequest里面设置的参数在这里组装成一个GenericRequest对象,并不会直接new GenericRequest对象,首先会从缓存池里看有无可用对象,如果有直接赋值,没有才去创建。
第二件事 就是执行这个GenericRequest对象了。调用Request的begin方法开始执行这个Request请求。首先获取target的大小之后调用onSizeReady()方法进行真正的网络请求,最终会调用Engine类的load()方法,首先会获取内存里面的缓存,如果缓存有的话直接返回,如果没有,则封装一个EngineJob对象,和EngineRunnable对象,EngineJob.start()执行这个EngineRunnable的run方法。在run方法里面调用decode方法。decode里面主要是获取数据以及对数据进行转码和解码操作。

Glide缓存相关。
内存缓存,首先从lruCache 移除这个key,将移除的结果存到弱引用的Map中。如果在lruCache中没有获取到图片,则从弱引用Map中获取数据。 获取数据成功之后首先将图片存入弱引用的Map中,当弱引用,relase之后将图片存入lrucache中。

硬盘缓存。
EngineRunnable的run方法获取数据分为两个方向一个是从磁盘缓存,一个是从网络,磁盘缓存也分为两个部分,一个是获取转码过的data,当然它也是用了DiskLruCache算法,一个是没有转码的源数据,获取源数据,还需要进行进一步转码和解码之后才返回。这也对应了不同的磁盘缓存策略,默认存取的是转码之后的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值