返回

细致解读Glide v4源码(1)——with

Android

Glide v4作为Android图片加载框架的翘楚,其简便的使用方法广受好评。然而,深入其源码探究其运行机制,能让我们对图片加载过程有更深入的理解。本文将带你逐行解读Glide v4源码,从with方法入手,揭开图片加载的神秘面纱。

with:图片加载的起点

在Glide中,with方法承担着图片加载请求的创建和初始化工作。它接收一个ContextActivity对象,作为图片加载上下文的载体。在FragmentActivity中,我们通常使用this作为参数,表示当前的活动上下文。

Glide.with(this)

深入源码,揭秘with

Glide的with方法定义在com.bumptech.glide.Glide类中,其源码如下:

public static RequestManager with(Context context) {
  checkNotNull(context, "Context can't be null");
  if (context instanceof Application) {
    return get(@Glide.ApplicationContext context);
  } else if (context instanceof FragmentActivity) {
    return get((FragmentActivity) context);
  } else if (context instanceof Activity) {
    return get((Activity) context);
  } else {
    return get(@Glide.ActivityContext context);
  }
}

从源码中可以看到,with方法根据传入参数的不同,返回不同的RequestManager对象。RequestManager是Glide图片加载请求的管理类,负责管理图片加载生命周期和配置。对于FragmentActivity,返回的是FragmentActivityGlideModule创建的RequestManager对象。

FragmentActivityGlideModule:定制图片加载

FragmentActivityGlideModule是一个GlideModule子类,它为FragmentActivity定制了图片加载行为。在该模块中,定义了如下方法:

@Override
public void registerComponents(Context context, Glide glide, Registry registry) {
  registry.register(
      GlideUrl.class,
      InputStream.class,
      new HttpGlideUrlLoader.Factory());
}

该方法注册了一个HttpGlideUrlLoader工厂,用于加载HTTP/HTTPS URL的图片。通过定制加载器,我们可以针对不同图片来源定制加载行为。

开启图片加载之旅

with方法创建的RequestManager对象,提供了各种方法来配置图片加载请求。通过调用.load()方法,指定需要加载的图片资源,.into()方法指定图片加载到哪个视图中,图片加载之旅就此开启。

结语

通过对Glide v4源码的深入解读,我们了解了with方法在图片加载过程中的关键作用。从创建请求到定制加载行为,它为后续的图片加载奠定了坚实的基础。后续文章中,我们将继续探索Glide源码,逐一揭秘图片加载的奥秘。