bumptech/glide · error · IllegalStateException
Cannot register already registered manager
Error message
Cannot register already registered manager
What it means
Thrown by Glide.registerRequestManager() when the given RequestManager is already in the internal managers set. Glide prevents the same RequestManager instance from being registered twice to avoid duplicate lifecycle tracking.
Source
Thrown at library/src/main/java/com/bumptech/glide/Glide.java:682
return glideContext.getRegistry();
}
boolean removeFromManagers(@NonNull Target<?> target) {
synchronized (managers) {
for (RequestManager requestManager : managers) {
if (requestManager.untrack(target)) {
return true;
}
}
}
return false;
}
void registerRequestManager(RequestManager requestManager) {
synchronized (managers) {
if (managers.contains(requestManager)) {
throw new IllegalStateException("Cannot register already registered manager");
}
managers.add(requestManager);
}
}
void unregisterRequestManager(RequestManager requestManager) {
synchronized (managers) {
if (!managers.contains(requestManager)) {
throw new IllegalStateException("Cannot unregister not yet registered manager");
}
managers.remove(requestManager);
}
}
@Override
public void onTrimMemory(int level) {
trimMemory(level);
// when level is higher than TRIM_MEMORY_UI_HIDDEN, it indicates that the app isView on GitHub (pinned to eb14a895d8)
Solutions
- Track whether you have already registered a RequestManager for a given lifecycle owner before registering again.
- Prefer Glide.with(context/fragment/activity) which manages registration internally, rather than manual registration.
- Ensure unregister is paired with register so re-registration after a proper teardown is valid.
- Avoid sharing a single RequestManager across multiple lifecycle owners.
Example fix
// before
if (!registered) { glide.registerRequestManager(manager); registered = true }
// but elsewhere the same manager registered again -> throws
// after
if (!managers.contains(manager)) {
glide.registerRequestManager(manager)
} Defensive patterns
Strategy: validation
Validate before calling
// Guard registration against duplicates.
fun registerOnce(glide: Glide, manager: RequestManager) {
// Glide.registerRequestManager is package-private; mirror the guard in your own tracking.
if (!registered.contains(manager)) {
glide.registerRequestManager(manager)
registered.add(manager)
}
} Prevention
- Prefer Glide.with(...) which manages registration lifecycle internally.
- Track registration state to avoid duplicate register calls.
- Keep register/unregister balanced around lifecycle events.
When it happens
Trigger: registerRequestManager(requestManager) is called and managers.contains(requestManager) is true (duplicate registration).
Common situations: Calling Glide.with(...).register-style APIs twice; a fragment/activity lifecycle hook that re-registers the same RequestManager; integrating a third-party library that also creates/registers RequestManagers; double onResume/attach callbacks registering the same instance.
Related errors
- Cannot unregister not yet registered manager
- Glide has been called recursively, this is probably an inter
- GeneratedAppGlideModuleImpl is implemented incorrectly. If y
- Log level must be one of Log.VERBOSE, Log.DEBUG, Log.INFO, L
- Failed to find result encoder for resource class: {}, you ma
AI-assisted analysis of bumptech/glide@eb14a895d8 (2026-08-14).
Data as JSON: /api/errors/5fb028b5e32b4c12.
Report an issue: GitHub.