Glide源码解析

Glide源码解析:

1、glide实现ComponentCallbacks2接口,这个接口是Android FrameWork层的接口,该接口一个很重要的作用就是借助Android系统的内存回收机制来进行内存处理。
Glide清理内存的机制其实就是通过ComponentCallback2来实现的。也就是glide本身并没有判断何时内存不足或者何时去清理内存需要去清理图片,
关于ComponentCallback2,是一个细粒度的内存回收管理回调,

Android的基本组件Application、Activity、Service、ContentProvider、Fragment均实现了该接口。
开发者应该实现onTrimMemory方法 ,有利于用户体验,系统有可能让APP存活的更久,不响应onTrimMemory回调,系统有可能kill进程。

2、内存维护的关键类:RequestManager
Glide根据传入参数的不同,从而绑定不同参数的生命周期,比如Activity、Fragment、Context,
其中的ActivityFragmentLifecycle参数对应了Activity或Fragment的生命周期函数回调。进而可以控制Glide的生命周期。

3、load过程
RequestManager 调用load方法,会创建一个RequestBuilder对象,
然后调用RequestBuilder的into方法,然后调用into()方法来创建一个target对象,接着跟踪另一个重载的into()方法,
每次为当前target创建一个请求之前,会先去拿该target之前绑定的request,如果有,会清除掉该request,重新创建绑定。
然后会调用obtainRequest()方法,其实这个方法就是创建了一个SingleRequest对象,,接着将target和该request对象绑定,接着调用requestManager.track(target,request)方法,
这里有两个对象,一个是targetTracker,一个是requestTracker,targetTracker用来存储当前正被使用的target对象,调用一次track方法,就会将该target对象存储起来,并且
用来管理requestManager下创建的所有target的生命周期。
RequestTracker对象很重要,负责管理请求的开启、取消、重新请求等,runRequest()方法用来开启请求。先将request对象存在弱引用中,优化内存,然后调用singleRequest.begin(),这个
方法就是先拿到size,然后去加载,核心是调用了engine.load(),load方法中调用三级缓存,然后是decode.job的run()方法,run方法中的核心代码是runWrapped(),方法中调用getNextGenerator方法,
该方法根据当前的阶段,创建对应的generator赋值给currentGenerator,最后是调用runGenerators()方法,核心代码是调用了currentGenerator.startNext()方法
(ResourceCache和DataCache都是磁盘缓存,区别在于前者根据图片唯一的key和宽高等资源属性生成key,后者根据图片得唯一key缓存。)
先根据图片key缓存到磁盘,之后根据model,从register中注册的loaddata中获取匹配的。然后调用对应的loaddata中的fetcher的loaddata方法,最终的网络请求部分交给了loaddata的fetcher对象,
调用fetcher对象的loadData方法。里面利用OKHTTP来进行网络请求,请求到的结果再通过callback返回上层,再最终到target的回调。进而完成glide的整个执行流程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值