Glide替换okhttp,更改超时时间,看似简单,具体写的过程中坑还是真多,特记录一下,也帮助需要的人。本文基于Glide 4.x。
首先,替换okhttp,官方给了一个及其简单的方式。
implementation "com.github.bumptech.glide:okhttp3-integration:4.6.1"
这个地方是有一个坑的。我实际做的时候,发现加上这一句以后,图片死活加载不出来了 。以为替换的方式有问题,查了大量资料和源码都没有结果。后来分析log发现log上写连接失败。我换了几张网络图片都不行,而用普通的连接方式是可以加载出图片的。于是想到了是wifi代理证书问题。换了个wifi果然好了。。
OK,okhttp替换是很简单(如果你的wifi没有问题的话。。),下面来看定制TIME_OUT。去他引用的这个integration工程里的OkHttpUrlLoader里看,有internalClient这个OkHttpClinet,依旧是写死的,不能定制其超时时间。OkHttpUrlLoader的Factory有两个构造函数,自然就想到了能不能调用第二个构造函数,传进一个定制了超时时间的OkHttpClient去。但是查看这个Factory的调用树,发现它是被OkHttpGlideModule(已经过时)和OkHttpLibraryGlideModule这两个类调用的,这两个类都是组件类,在Glide初始化的时候会执行registerComponents替换掉原来的GlideUrl。区别是一个是老的形式,必须在manifest里定义meta-data,另一个是新的形式,用注解的方式替