我已经为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。这不应该发生在replace中。为什么会发生这种情况,以及如何才能让ModelLoader真正被调用?
发布于 2019-04-29 22:22:09
将Glide call移动到presenter中,它起作用了--可能是上下文问题?
https://stackoverflow.com/questions/55886887
复制相似问题