1. with(this):生命周期绑定
Glide.with(Activity/Fragment/Context)
核心机制:创建与 UI 生命周期绑定的
RequestManager底层实现:
通过
RequestManagerRetriever获取单例非 Application 上下文:
向 Activity/Fragment 添加隐藏 Fragment(
RequestManagerFragment)通过 Fragment 生命周期回调控制请求(页面销毁时自动取消加载)
Application 上下文:使用全局生命周期
设计意图:解决内存泄漏问题,实现请求与页面生命周期同步
2. load(url):构建数据模型
.load(String url)
核心流程:
创建
DrawableTypeRequest对象初始化
ModelLoader:String.class→StreamStringLoader(处理网络流)最终组合为
ImageVideoModelLoader(支持流 + 文件描述符双通道)
封装参数:
URL 数据源
解码器(
ImageVideoGifDrawableLoadProvider)转码器(
GifBitmapWrapperDrawableTranscoder)
关键设计:通过泛型抽象支持多种数据源(URL/文件/资源ID等)
3. into(imageView):加载与渲染
.into(ImageView)
▶ 阶段1:初始化
将
ImageView封装为Target(GlideDrawableImageViewTarget)构建
GenericRequest对象(整合 URL/Target/缓存策略等参数)
▶ 阶段2:缓存检查

▶ 阶段3:网络加载(未命中缓存时)
网络层:
使用
HttpUrlFetcher(基于HttpURLConnection)支持自动重定向(最大 5 次跳转)
// 核心下载逻辑 HttpURLConnection connection = url.openConnection(); InputStream is = connection.getInputStream();解码流程:
通过
ImageVideoGifDrawableLoadProvider选择解码器静态图:
StreamBitmapDecoder→Downsampler.decode()(处理尺寸采样/旋转)最终得到
BitmapResource
GIF:
GifResourceDecoder→ 生成GifDrawable
统一封装为
GifBitmapWrapper
转码适配:
GifBitmapWrapperDrawableTranscoder统一转码为GlideDrawable静态图 →
GlideBitmapDrawableGIF →
GifDrawable
▶ 阶段4:线程切换与渲染
切主线程:
通过
Handler(Looper.getMainLooper())切换线程
// EngineJob 中的线程切换 MAIN_THREAD_HANDLER.obtainMessage(MSG_COMPLETE, this).sendToTarget();渲染到 ImageView:
// GlideDrawableImageViewTarget 最终调用 imageView.setImageDrawable(glideDrawable);GIF 处理:
调用
GifDrawable.start()启动动画
关键核心设计
三级缓存体系:
活动资源(Active Resources)→ 内存缓存(LRC)→ 磁盘缓存(DiskLRU)
缓存Key生成规则:URL + 尺寸 + 变换签名
资源复用优化:
BitmapPool复用 Bitmap 内存,减少 GC
Bitmap reusedBitmap = bitmapPool.get(width, height, config);
生命周期自动化:
通过隐藏 Fragment 实现请求自动取消
模块化扩展:
支持自定义
ModelLoader(扩展数据源)支持自定义
Transformation(图片变换)
智能尺寸计算:
自动读取 View 的 layout_width/layout_height
通过
ViewTarget.getSize()计算适配尺寸
面试级回答模板
Glide.with().load().into()的核心流程:1. 生命周期绑定(with)
通过隐藏 Fragment 绑定页面生命周期,确保页面销毁时自动释放资源
2. 数据建模(load)
创建
ModelLoader处理不同类型数据源(URL 对应StreamStringLoader)封装为可配置的
DrawableTypeRequest3. 加载渲染(into)
缓存检查:三级缓存依次查询(活动缓存 → 内存 → 磁盘)
网络下载:未命中时通过
HttpUrlFetcher下载数据流解码处理:根据图片类型选择解码器(静态图用
Downsampler处理尺寸采样)统一转码:转换为
GlideDrawable兼容静图/GIF线程切换:通过 Handler 切主线程渲染到 ImageView
GIF 处理:自动调用
start()播放动画设计优势:
三级缓存减少网络请求
BitmapPool 复用内存降低 GC 频率
生命周期自动化管理避免内存泄漏
模块化设计支持灵活扩展