设为首页 加入收藏

TOP

Glide源码解析三(注册组件)(二)
2023-08-26 21:10:21 】 浏览:265
Tags:Glide 解析三
p;

我们最终来到这个方法:

public synchronized <T, R> void append(
    @NonNull String bucket,
    @NonNull ResourceDecoder<T, R> decoder,
    @NonNull Class<T> dataClass,
    @NonNull Class<R> resourceClass) {
  getOrAddEntryList(bucket).add(new Entry<>(dataClass, resourceClass, decoder));
}

getOrAddEntryList返回的是一个List<Entry<?, ?>>类型,里面存放着构造好的Entry实体类。这个List其实存放的是同样类型的解码器,比如都是Registry.BUCKET_BITMAP类型的,而这个整个List存放在一个map里面,key就是Registry.BUCKET_BITMAP。

 

private final Map<String, List<Entry<?, ?>>> decoders = new HashMap<>();

 

private synchronized List<Entry<?, ?>> getOrAddEntryList(@NonNull String bucket) {
  if (!bucketPriorityList.contains(bucket)) {
    // Add this unspecified bucket as a low priority bucket.
    bucketPriorityList.add(bucket);
  }
  List<Entry<?, ?>> entries = decoders.get(bucket);
  if (entries == null) {
    entries = new ArrayList<>();
    decoders.put(bucket, entries);
  }
  return entries;
}

getOrAddEntryList方法里面,通过bucketPriorityList判断是否已经有了一个这个类型的list,有的话直接从map获取该list,然后将注册的放进去。

 

四、资源编码器

如源码中:

如:

.append(GifDrawable.class, new GifDrawableEncoder())

将GifDrawable资源类型进行编码,编码器为:GifDrawableEncoder,GifDrawableEncoder里面主要是将gif数据保存为文件,对gif进行磁盘缓存的时候便需要用到这个编码器。

存储的过程与之前的类似,存在list中。

 

五、转码器

如源码中的:

register.register(Bitmap.class, BitmapDrawable.class, new BitmapDrawableTranscoder(resources))

将Bitmap转化为BitmapDrawable,转码器为BitmapDrawableTranscoder

 

存储过程类似。

 

六、ImageHeaderParserRegistry 

如源码中的:

registry.register(new DefaultImageHeaderParser());

默认的image文件头的解析器,可以由这个解析器判断图片类型,这也是用同样的代码能够加载动图与静图的原因。

 

存储过程类似。

 

至于DataRewinderRegistry 还未细看,后面再来补充,后面也会继续更新Glide相关的源码解析。

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android NDK基础介绍及例子 下一篇kotlin协程异常处理之-try catch

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目