1. 背景
项目使用Glide作为图片加载控件,自定义ModelLoader
2. 问题
在自定义DataFetcher中,发现loadData在失败时,再自动调用这个方法,因此被加载了2次;
原先是在这边添加失败重试的,现在是导致多次调用,重试多次。
3. 排查
3.1在自定义ModelLoader添加log
发现这个方法被调用2次,即加载的任务被加载到队列有2次。
3.2 对比图片加载成功和失败
在成功加载时,在自定义DataFetcher的方法loadData只被调用一次,而在网络访问失败时,发现loadData有2次调用,第二次调用是紧跟着第一次失败后调用;
自定义DataFetcher的构造方法也被调用2次,说明有2次new出来的对象;方法cleanup也被调用了2次
3.3 Glide内部流程分析
里面有个8个loader,其中HttpUriLoader和UrlUriLoader都进入自定义的modelLoader.buildLoadData。
猜测是注册时替换系统预先注册的这个2个modelloader,然后在失败的时候:
fetchers有2个,在失败时,在fetchers的数组中,会进入第二个loader去loadData去。
解决:
使用glide最新的版本 4.12.0版本不会出现这个问题。