我已经为Glide创建了一个AppGlideModule文件,并用我自己的ModelLoader和工厂替换了注册表。但是,传递我拥有ModelLoader的实例(GlideModel)不会加载ModelLoader,调试/日志语句所显示的结果甚至没有触及ModelLoader的内部。我的保全规则只是
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep class com.bumptech.glide.GeneratedAppGlideModuleImpl
,我可以确认Glide正在运行,并且确实在registerComponents中运行注册表替换。将请求侦听器添加到glide调用中也不会产生异常,也不会更改glide调试日志级别。
在AppGlideModule中,我有:
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
val locallibFactory = LocallibFactory.Factory()
registry.replace(GlideModel::class.java, InputStream::class.java, locallibFactory)
}
LocallibFactory是
internal class LocallibFactory : ModelLoader<GlideModel, InputStream> {
override fun handles(model: GlideModel): Boolean {
return true
}
override fun buildLoadData(
model: GlideModel,
width: Int,
height: Int,
options: Options
): ModelLoader.LoadData<InputStream>? {
val key = ObjectKey("${model.book.filePath}:${model.position}")
Timber.d("Got here")
return ModelLoader.LoadData(key, LocallibDataFetcher(model))
}
internal class Factory : ModelLoaderFactory<GlideModel, InputStream> {
override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader<GlideModel, InputStream> {
Timber.d("Got here2")
return LocallibFactory()
}
override fun teardown() {
// Do nothing
}
}
}
Glide在片段中的使用方式为
Glide.with(this)
.load(GlideModel(book, 0, true))
.into(card.imageView)
但是木材日志语句从未命中,并且调试表明它从未在LocallibFactory ModelLoader中进行。替换不应该发生这种情况。为什么会发生这种情况?如何才能真正调用ModelLoader?
答案 0 :(得分:0)
将Glide调用移动到演示者中,并且奏效了-可能是上下文问题?