内存缓存中读取图片的主流程:
- 生成缓存的key。
- 从LruCache获取缓存图片。
- LruCache没取到,从弱引用获取图片。
- 内存缓存取不到,进入异步处理。
- 将正在加载的图片放到弱引用缓存
- 使用完之后从弱引用删除图片缓存
- 是否支持缓存,缓存到LruCache缓存
- 不支持缓存直接调用垃圾回收,回收图片
Glide磁盘缓存流程
- 读:先找处理后(result)的图片,没有的话再找原图。
- 存:先存原图,再存处理后的图。
加载大图片时可能会超时,需要修改超时时间,也就是重写GlideModule。
RecycleView 使用glide实现图片瀑布流时一定要先计算好图片的宽高,并设置为ImageView的宽高,这样就可以使RecycleView复用模板,不会出现加载卡顿,以及加载导致内存溢出。
Glide加载图片变绿
原因,Glide默认加载图片的格式是DecodeFormat.PREFER_RGB_565
,缺少ALPHA通道,导致加载图片变绿。
解决方案
Glide.setup(new GlideBuilder(context)
.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888));
Glide使用莫过于
Glide.with(context)
.load(path)
.priority(Priority.LOW)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(imageView);
当context为application时,会把imageView是生命周期延长到整个运行过程中,imageView不能被回收,从而造成OOM异常。
解决方案:
1、不使用application作为context,这样imageView的生命周期就仅限于一个页面,不会出现OOM。