Files
mkdocs/docs/android面试/开源框架/Glide原理.md
2026-01-15 11:53:37 +08:00

2.8 KiB
Raw Blame History

Glide原理

目录


Glide架构

架构图

Request → Engine → DecodeJob → DataFetcher → ModelLoader
    ↓         ↓         ↓            ↓
  Memory   Disk     Network      Resource
  Cache    Cache                 Cache

核心组件

// 1. RequestManager请求管理
// 2. Engine引擎协调加载
// 3. DecodeJob解码任务
// 4. ModelLoader模型加载器
// 5. ResourceCache资源缓存

图片加载流程

加载流程

1. Glide.with().load().into()
2. RequestManager 创建 Request
3. Engine 检查缓存
4. 缓存未命中,创建 DecodeJob
5. 从网络/磁盘加载
6. 解码图片
7. 转换和缓存
8. 显示到 ImageView

代码示例

Glide.with(context)
    .load(url)
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .override(200, 200)
    .into(imageView);

缓存机制

三级缓存

// 1. 活动资源缓存Active Resources
// 2. 内存缓存Memory Cache
// 3. 磁盘缓存Disk Cache

缓存策略

// 默认策略ALL
// - 原始图片缓存到磁盘
// - 转换后图片缓存到内存和磁盘

Glide.with(context)
    .load(url)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(imageView);

内存管理

内存优化

// 1. 自动管理 Bitmap 内存
// 2. 根据 ImageView 大小加载
// 3. 及时释放资源

内存缓存

// LRU 缓存
// 最近最少使用的图片会被回收

Glide源码分析

关键类

// Glide入口类
// RequestManager请求管理
// Engine引擎
// DecodeJob解码任务
// BitmapPoolBitmap 对象池

Glide最佳实践

1. 使用合适的缓存策略

// 根据场景选择缓存策略
.diskCacheStrategy(DiskCacheStrategy.ALL) // 缓存所有
.diskCacheStrategy(DiskCacheStrategy.NONE) // 不缓存

2. 设置图片大小

// 根据 ImageView 大小加载
.override(200, 200)

3. 处理加载失败

.error(R.drawable.error)
.fallback(R.drawable.fallback)

面试常见问题

Q1: Glide 的缓存机制?

答案:

  • 三级缓存:活动资源、内存、磁盘
  • LRU 算法管理缓存
  • 自动管理内存

Q2: Glide 和 Picasso 的区别?

答案:

  • Glide:功能更丰富,内存管理更好
  • Picasso更轻量API 更简单

Q3: Glide 如何避免内存泄漏?

答案:

  • 使用生命周期感知
  • 自动取消请求
  • 及时释放资源

最后更新2024年