- 负责从缓存数据和原始源资源解码并转码的类
其中 <R> 代表着需要被转码的数据
DecodeJob<R> implements DataFetcherGenerator.FetcherReadyCallback,Runnable,
Comparable <R>,Poolable
其中DecodeJob实现了DataFetcherGenerator.FetcherReadyCallback,和Runnable这两个重要的接口,先看一下DataFetcherGenerator.FetcherReadyCallback这个接口,从名称上看这是一个数据抓取器生成器,应该和抓取图片数据有关,FetcherReadyCallback应该是一个回调
DataFetcherGenerator 接口分析
-
通过注册过的ModelLoader和Model来生成一系列的DataFetcher
其中 FetcherReadyCallback 接口在generator完成数据加载之后调用
-
FetcherReadyCallback 接口分析
reschedule() 用来重新请求一次startNext() 在Glide自己的线程内
onDataFetcherReady() 用来通知加载已经完成
参数: sourceKey:Key 是已经加载的loadData的id data:Object 是已经加载的loadData 或者为null代表加载失败 fetcher:DataFetcher<?> 是尝试加载的数据抓取器 dataSource:DataSource 是将要加载的数据源 attemptedKey:Key 是将要加载的数据的key 看了这四个参数依然不知道这个onDataFetcherReady()到底要做什么操作onDataFetcherFailed() 用来通知load失败的回调
参数: attemptedKey:Key 用来加载数据的Key,可能是备用key e:Exception 加载失败抛出的异常 fetcher:DataFetcher<?> 要加载的数据抓取器 dataSource:DataSource 将要加载的数据源startNext()
尝试生成一个新的DataFetcher 对象, 并且返回 boolean = 是否当前这个DataFetcher已经start或者没有cancel()
尝试取消当前running状态的fetcher 这个方法应当在主线程中调用并且应该快速完成此方法内的操作