Glide4.0源码全解析(一),GlideAPP和.with()方法背后的故事

本文深入解析Glide 4.0源码,探讨GlideApp的生成原理,@GlideModule注解的作用,以及with()方法的工作流程。文章介绍了Glide通过注解生成GlideApp,使用support-v4包的原因,以及为何通过隐藏Fragment管理生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在上一篇文章中我们体验了Glide-4.0的强大,以及更加简便的API,很多童鞋已经开始迁移了,那么接下来我们一起探索一下他的神奇之处:

首先我们来看一下4.0的基本用法:

GlideApp.with(this)
        .load(R.raw.large_giphy_logo)
        .into(giphyLogoView);

就这么简简单单的一句代码,其实Glide在背后帮我们做了成吨的事情。所以为了解开大家的好奇,一起来解析一下Glide-4.0源码。

准备

想要阅读源码那么久需要先下载源码,
GitHub地址:
https://github.com/bumptech/glide
我们这一篇是基于4.1.0讲解的,后续如果想查看这个版本的代码可以通过下面的链接:
https://github.com/bumptech/glide/tree/v4.1.1
剩下的应该不用说了吧,直接
git clone https://github.com/bumptech/glide.git

下载好源码之后我们可以看到里面有五个demo,我们可以运行一下看看效果,这里就不给大家挨着展示了。
这里写图片描述

到这里我们即将开启我们的源码之旅。
可能我们最大的疑惑就是glide为什么就用了简单的一句代码就可以实现图片的加载。
GlideApp.with(this).load(R.raw.large_giphy_logo).into(giphyLogoView);

首先,先说一下今天的解读思路:
Glide基本的加载步骤是三步那么我们就分别解读这三步with()load()into()到底是如何实现的,以及GlideApp是什么鬼?
今天这篇文章先讲述一下 GlideAppwith()背后的故事。

GlideApp如何诞生?

1、 @GlideModule注解做了什么事情?

/**
 *在编译时,为AppGlideModules和LibraryGlideModules提供注入。
 *
 *替换掉  AndroidManifest.xml 中value="GlideModule" 的 <meta-data /> 。
 *这里需要注意后续需要用到<meta-data />这个标签,先记住此处
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface GlideModule {
  /**
   *此处返回的name就是你在使用时的class name。
   *
   *eg:将GlideApp改为GlideAppX
   *那么通过注解生成的类就是GlideAppX
   *那么你使用时候就会是 GlideAppX.with(this)
   */
  String glideName() default "GlideApp";
}

注视已经详细介绍了这个类的作用,后面我们来看一下生成的GlideApp。

2、GlideApp能做啥?

GlideApp这个类事通过上面的注解获得到的,是不容许被修改的,是Glide在应用中的入口,做一些初始化,获取图片存储路径之类的,非常简单,注释也非常清楚,就不详细叙述了。
此处省略中间代码,

public final class GlideApp {
  private GlideApp() {
  }

  /**
   * @see Glide#getPhotoCacheDir(Context)
   */
  @Nullable
  public static File getPhotoCacheDir(Context context) {
    return Glide.getPhotoCacheDir(context);
  }

  ...
  ... 省略
  ...

  /**
   * @see Glide#with(View)
   */
  public static GlideRequests with(View view) {
    return (GlideRequests) Glide.with(view);
  }
}

那么到了这里我们已经知道了GlideAPP是如何诞生的以及GlideApp都有哪些方法。

接下来我们就详细看一下AppGlideModule做什么了,为啥要继承AppGlideModule?

3.为什么继承AppGlideModule?

我们先来看一下***AppGlideModule***的API

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值