1、Glide 是什么?
答案
Glide 是 Google 推荐的 Android 图片加载框架,专注图片加载、缓存、压缩、内存管理、生命周期绑定;
支持网络图片、本地图片、GIF、视频缩略图,默认内存占用低、适配生命周期、自动回收。
2、Glide 优势 对比 Picasso
答案
- 生命周期绑定:自动跟随 Activity/Fragment 生命周期,页面销毁自动暂停请求、释放内存,防泄漏。
- 三级缓存:内存缓存、磁盘缓存、资源缓存。
- 自动压缩 :根据 ImageView 大小自动适配采样率,减少内存占用。
- 支持 GIF、视频缩略图。
- 加载速度更快、弱网表现好、内存优化更强。
- 可配置优先级、预加载、缩略图、变换裁剪。
3、Glide 四级缓存原理
Glide 是四级缓存 ,优先级从上到下:活跃缓存 → 内存缓存 → 磁盘缓存 → 网络
1. 活跃缓存(Active Resources)
- 正在当前页面显示、被引用的 Bitmap
- 从内存缓存取出后放入这里
- 优先级别最高,正在用的图片不被 Lru 回收
2. 内存缓存(LruCache 内存)
- Lru 最近最少使用算法
- 存放近期用过、暂时没显示的图片
- 读取极快,App 在内存中,退出页面可回收
3. 磁盘缓存(DiskCache)
- 本地持久化缓存
- 分原图缓存 、处理后缓存
- App 重启还在,不占内存
4. 网络缓存(网络请求)
- 前面三级都没命中,才去网络下载
- 下载完依次存入磁盘、内存、活跃缓存
加载流程口诀
先查活跃 → 再查内存 → 再查磁盘 → 最后走网络
一句话面试版
Glide 四级缓存依次是:活跃缓存、内存 Lru 缓存、磁盘缓存、网络;先从正在使用的活跃缓存找,再找内存、再找磁盘,都没有才请求网络,层层复用,省流量、省内存、减少 OOM。
4、Glide 为什么更省内存?
答案
- 按 ImageView 实际尺寸 自动采样压缩,不加载全尺寸大图。
- 复用 Bitmap 内存池,减少频繁创建销毁 Bitmap。
- 绑定 Lifecycle,页面后台 / 销毁自动回收 Bitmap、取消加载。
- LruCache 严格控制内存缓存上限,防止内存暴涨。
5、Glide 怎么绑定生命周期?有什么用
答案
Glide 内部集成 Lifecycle;
绑定 Activity/Fragment 生命周期:
- 页面 onStop:暂停图片请求
- 页面 onDestroy:立即回收 Bitmap、取消任务、释放内存
- 好处:减少流量、节省电量、防止内存泄漏、降低 OOM 概率。
6、Glide 缓存策略有几种?
答案
java
DiskCacheStrategy.XXX
- ALL:缓存原图 + 压缩图
- NONE:不使用磁盘缓存
- DATA:只缓存原始图片
- RESOURCE:只缓存处理后的压缩图
- AUTOMATIC:自动根据资源类型决定(默认)
7、Glide 内存缓存和磁盘缓存区别
答案
- 内存缓存:速度最快、APP 在就存在、占用内存、退出页面可回收。
- 磁盘缓存:速度稍慢、持久化存储、不占内存、APP 重启仍有效。
8、Glide 怎么避免 OOM?
答案
- 自动根据 ImageView 大小采样降分辨率。
- Bitmap 复用池,减少频繁创建对象。
- 绑定生命周期,页面销毁自动释放 Bitmap。
- LruCache 限制内存缓存最大值。
- 大图手动设置
override()固定宽高。 - 不用一次性加载大量高清原图。
9、Glide 加载流程源码简述
答案
- with ():绑定生命周期、获取上下文
- load ():设置图片资源地址
- into ():目标 ImageView,开始构建请求
- 内部经过:解码 → 变换 → 缓存查找 → 网络下载 → 存入缓存 → 回调显示
- 自动根据生命周期管理任务和内存回收。
10、into () 原理
答案 into 内部创建 Target 关联 ImageView;监听图片加载回调,成功后把 Bitmap 设置给 ImageView;同时监听 View 生命周期,View 被回收时自动取消加载、释放资源。
11、Glide 预加载作用
答案 preload() 提前把图片缓存到本地磁盘;进入页面时直接读缓存,秒开无等待,提升列表滑动流畅度。
12、Glide 加载 GIF 注意点
答案 默认支持 GIF;可强制只加载静态图 asBitmap();也可以 asGif() 强制动图;GIF 占用内存高,列表慎用大量动图。
13、Glide 自定义变换(圆角、圆形)
答案 继承 BitmapTransformation;重写 transform 方法,手动裁剪圆形、圆角;项目中常用自定义圆形裁剪、高斯模糊。
14、Glide 怎么清空缓存
答案
- 清除内存缓存:
Glide.get(context).clearMemory()主线程 - 清除磁盘缓存:
Glide.get(context).clearDiskCache()子线程
15、Glide 和 Coil 简单对比
答案
- Glide:功能全、缓存强、成熟稳定、包稍大、Java 风格
- Coil:Kotlin 原生、简洁轻量、基于协程、API 优雅、适合新项目
16、Glide 如何绑定 Activity 生命周期
1. 核心方式
Glide 调用 with(Activity/Fragment) 时,内部会自动创建一个无 UI 的空白 Fragment,挂靠在当前 Activity 上。
2. 原理
这个隐藏空白 Fragment 能精准感知 Activity 的生命周期:
- 页面 onStart/onStop:自动暂停、恢复图片加载
- 页面 onDestroy:自动取消所有请求、回收 Bitmap、释放内存
3. 为什么用空白 Fragment
Android 系统 Fragment 能天然监听宿主生命周期,不用改 Activity 任何代码,无侵入、就能实现生命周期感知。
4. 一句话总结
Glide 通过 with() 内部植入一个无 UI 空白 Fragment,借助 Fragment 感知 Activity 生命周期,自动在页面后台暂停加载、销毁时取消请求释放资源,避免内存泄漏和多余流量消耗。