滑行未加载ModelLoader工厂

时间:2019-04-28 03:56:26

标签: android android-glide

我已经为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?

1 个答案:

答案 0 :(得分:0)

将Glide调用移动到演示者中,并且奏效了-可能是上下文问题?