您的位置:

提示IllegalStateException("Recursive Registry initialization! In your"+ " AppGlideModule and LibraryGlideModules, Make sure you're using the provided "+ "Registry rather calling glide.getRegistry()!")的解决方案

  发布时间:2023-01-27 11:30:02
报错的原因这个异常是由于在应用程序和库中重复初始化 Glide 的 Registry 导致的。在应用程序或库中自定义 GlideModule 中,不应该调用方法来获取 Registry 实例,而应该使用提供的 Registry 对象来注册自定义组件。总之,就是确保只有一处在AppGlideModule或者LibraryGlideModule中调用方法来注册组件,避免重复初始化。

报错的原因

这个异常是由于在应用程序和库中重复初始化 Glide 的 Registry 导致的。在应用程序或库中自定义 GlideModule 中,不应该调用 Glide.getRegistry() 方法来获取 Registry 实例,而应该使用提供的 Registry 对象来注册自定义组件。

如何解决

解决方案是在应用程序和库中确保只有一个地方注册 Glide 的 Registry。

应用程序中,可以在自定义的 AppGlideModule 中调用 registry.append(...) 方法来注册自定义组件。

如果在库中使用 Glide,可以在库中提供一个 LibraryGlideModule,在这个类中调用 registry.append(...) 方法来注册自定义组件。

同时确保在应用程序和库中都没有调用 Glide.getRegistry() 方法。

总之,就是确保只有一处在AppGlideModule或者LibraryGlideModule中调用registry.append(...)方法来注册组件,避免重复初始化。

使用例子

是的,可以在自定义的 AppGlideModule 类中使用类似以下的代码来注册自定义组件:


@GlideModule
public final class MyAppGlideModule extends AppGlideModule {
    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        registry.append(MyModel.class, InputStream.class, new MyModelLoader.Factory());
    }
}

库中可以在 LibraryGlideModule 类中使用类似以下的代码来注册自定义组件:


@GlideModule
public final class MyLibraryGlideModule extends LibraryGlideModule {
    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        registry.append(MyModel.class, InputStream.class, new MyModelLoader.Factory());
    }
}

在上面的代码中,我们使用 registry.append(MyModel.class, InputStream.class, new MyModelLoader.Factory()) 方法来注册自定义的 MyModelLoader。

注意,在应用程序或库中只需要一个地方注册 Registry 即可,避免重复注册。