Glide适配Androidx
背景
项目中使用的Glide版本是3.7.0。由于项目总体要迁移到Androidx,因此开始了一场Glide的大版本升级旅程。html
官方文档
https://muyangmin.github.io/glide-docs-cn/doc/download-setup.html
按照官方步骤大致可行,但老是会遇到一些意外状况,好比对于Androidx的兼容问题。java
兼容Androidx
由于Glide.4.8.0系列的包并无兼容Androidx,因此在项目迁移到Androidx时须要继续升级Glide版本。
一、直接使用Glide最新版本4.11.0,此版本已经适配Androidx。
二、须要引入两个关联的Androidx库:
androidx.vectordrawable:vectordrawable-animated:1.1.0
androidx.exifinterface:exifinterface:1.2.0android
libs依赖
有些状况可能咱们须要下载库包,而不是maven依赖
一、以下地址下载Glide.4.11.0最新包
https://mvnrepository.com/artifact/com.github.bumptech.glide/glide
二、须要引入两个关联的Androidx库:
androidx.vectordrawable:vectordrawable-animated:1.1.0
androidx.exifinterface:exifinterface:1.2.0
三、jar包会致使关联包没法引入,须要下载关联jar
Glide GIF Decoder Library:
https://mvnrepository.com/artifact/com.github.bumptech.glide/gifdecoder
Glide Disk LRU Cache Library:
https://mvnrepository.com/artifact/com.github.bumptech.glide/disklrucache
四、咱们的项目引入如上两个包已经编译成功。可是不排除其余项目有更多依赖,若是遇到 NoClassNotFound的状况,能够参考以下地址寻找关联包:
https://mvnrepository.com/artifact/com.github.bumptech.glidegit
一些消失的方法
须要借用apply和RequestOptions:
Glide.with(context).load(R.drawable.ic_transport_theme_art)
.apply(new RequestOptions().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE))
.into(mThemeCardBgTarget);github
AppGlideModule
这个东西利用注解帮你桥接了老方法,能够继续使用升级后消失的方法,以下:
不过须要使用GlideApp
GlideApp.with(context).load(R.drawable.ic_transport_theme_art)
.skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).into(mThemeCardBgTarget);web
神坑!!!! java.lang.IllegalStateException: You cannot call Glide.get() in registerComponents(), use the provided Glide instance instead
Glide升级后,使用了单例模式,因此并发使用Glide.with会出现如上报错。
解决办法:
能够在并发使用Glide.with的地方加锁;或者继承Application,在应用刚起动的最开始,作一次无用的Glide.with初始化实例。并发