光阴似箭,闲话少说...
上期我说要搞清楚Glide构造里的各个对象,也就是下面这堆东西:

但是,今天我打开第一个对象Engine准备剖析它的时候发现事情没有那么简单啊,里面一大坨代码真是我不认识它它也不识得我,烦躁...
没办法牛逼已经吹出去了,一个个看吧,烦躁,走起...

这个貌似有点牛逼的类啊开篇即说这是一个负责启动、管理活动和缓存资源的类,叫发动机不为过,可以的...
它实现了那个job监听:

这表明它在Job完成或者取消的时候要搞点小动作...
它实现了资源移除监听:

哟这还是个内部接口,挺别致的嘛...
它还实现了资源释放的监听:

对于资源的管理还是考虑的比较周到的...
接下来看看那些成员变量吧:

Jobs里面维护了两个map,不知道它要搞什么飞机,点击看看EngineJob先

就是管理load回调的,别走远,先回到Engine...

嗯,生产EngineKey的工厂,等等,这是什么鬼,去看看吧

缓存的key,噢,看它的hash和equals

有点意思,别走远,先回到Engine...

内存缓存的接口,没什么好说的
EngineJobFactory,刚才看了EngineJob,这就是它的工厂的,么什么好说的

安全回收资源,嗯,怎么个安全法呢,大概就是说一个资源如果有子资源,直接回收的话会导致循环,所以发handler去回收,好吧不明觉厉。

Engine内部懒加载的磁盘缓存提供者

DecodeJob的工厂

Activity相关资源维护类
好了到此成员变量都大概打了个招呼,接下来看看方法
首先构造主要是初始化成员变量的值

接下来看load方法,这是核心呀,感觉有料哟...

可以看到,先通过KeyFactory拿到key,然后尝试通过这个key去从内存中获取Resource

如果在内存中没有拿到,则从缓存中去取

如果都没有拿到,那就开启EngineJob去加载,这不就是三级缓存的思想么。很棒棒。
到这里这个类几乎就读得差不多了,还有几个辅助方法可以暂时忽略。
今天我们主要读了Engine这个类,没有学到任何东西,没关系,我们已经迈出了一小步,正所谓万丈高楼平地起,接下来我先上个厕所,下期再见。
网友评论