提示IllegalStateException("Recursive Registry initialization! In your"+ " AppGlideModule and LibraryGlideModules, Make sure you're using the provided "+ "Registry rather calling glide.getRegistry()!")的解决方案
报错的原因
这个异常是由于在应用程序和库中重复初始化 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 即可,避免重复注册。