GLide 源码 面试

Glide.with(this).load(url).into(imageView);
with()
1.with()方法的重载种类非常多,既可以传入Activity,也可以传入Fragment或者是Context
实际上只有两种情况而已,即传入Application类型的参数,和传入非Application类型的参数
2.Application自动就是和应用程序的生命周期是同步的
3.非Application:
不管你在Glide.with()方法中传入的是Activity、FragmentActivity、v4包下的Fragment、还是app包下的Fragment,最终的流程都是一样的,那就是会向当前的Activity当中添加一个隐藏的Fragment
因为Glide并没有办法知道Activity的生命周期,于是Glide就使用了添加隐藏Fragment的这种小技巧,因为Fragment的生命周期和Activity是同步的,如果Activity被销毁了,Fragment是可以监听到的,这样Glide就可以捕获这个事件并停止图片加载了

load(url).
1.Glide是支持图片URL字符串、图片本地路径等等加载形式的
2.它提供了asBitmap()和asGif()这两个方法
它们分别又创建了一个BitmapTypeRequest和GifTypeRequest,如果没有进行强制指定的话,那默认就是使用DrawableTypeRequest

into()
1.load()方法中调用的所有API,其实都是在这里组装到Request对象当中的,会先去获取一个error的占位图,如果获取不到的话会再去获取一个loading占位图,这就是laceholder()和error()这两个占位图API

2.图片加载:这里要分两种情况,一种是你使用了override() API为图片指定了一个固定的宽高,一种是没有指定,没指定会根据ImageView的layout_width和layout_height值做一系列的计算,来算出图片应该的宽高
3.load()方法中的代码虽然有点长,但大多数的代码都是在处理缓存的
4.decodeStream()方法中会先服务器返回从流中读取2个字节的数据,来判断这张图是GIF图还是普通的静图,如果是GIF图就调用decodeGifWrapper()方法来进行解码,如果是普通的静图就用调用decodeBitmapWrapper()方法来进行解码
5.当然这里其实处理了很多的逻辑,包括对图片的压缩,甚至还有旋转、圆角等逻辑处理,但是我们目前只需要关注主线逻辑就行了。decode()方法执行之后,会返回一个Bitmap对象,那么图片在这里其实也就已经被加载出来了,剩下的工作就是如果让这个Bitmap显示到界面上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值