DecodeJob<R> 分析

165 阅读1分钟

- 负责从缓存数据和原始源资源解码并转码的类

其中 <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 
    这个方法应当在主线程中调用并且应该快速完成此方法内的操作