bumptech/glide · error · IllegalStateException
Cannot unregister not yet registered manager
Error message
Cannot unregister not yet registered manager
What it means
Thrown by Glide.unregisterRequestManager() when the given RequestManager is not present in the internal managers set. Glide requires an unregister to correspond to a prior successful register to keep lifecycle accounting consistent.
Source
Thrown at library/src/main/java/com/bumptech/glide/Glide.java:691
}
}
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 is
// in the background, limit the memory usage by memoryCategoryInBackground.
if (level > TRIM_MEMORY_UI_HIDDEN) {
setMemoryCategoryWhenInBackground();
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// Do nothing.View on GitHub (pinned to eb14a895d8)
Solutions
- Guard unregister with a contains check, or track registration state before calling unregister.
- Ensure register/unregister are balanced and idempotent around the same lifecycle events.
- Avoid calling unregister from multiple paths for the same RequestManager.
- Prefer Glide.with(...).onDestroy()/lifecycle management which handles pairing internally.
Example fix
// before
glide.unregisterRequestManager(manager) // called twice -> throws second time
// after
synchronized(monitor) {
if (registeredManagers.remove(manager)) {
glide.unregisterRequestManager(manager)
}
} Defensive patterns
Strategy: validation
Validate before calling
// Guard unregister against missing registrations.
fun unregisterIfPresent(glide: Glide, manager: RequestManager) {
if (registered.remove(manager)) {
glide.unregisterRequestManager(manager)
}
} Prevention
- Pair each unregister with a successful register; track state explicitly.
- Avoid unregistering from multiple paths for the same manager.
- Use Glide.with(...).onDestroy() for lifecycle-managed teardown.
When it happens
Trigger: unregisterRequestManager(requestManager) is called and managers.contains(requestManager) is false.
Common situations: Calling unregister twice for the same manager; unregistering a manager that was never registered; a lifecycle hook firing teardown after the manager was already removed; a race where another path removed it first.
Related errors
- Cannot register already 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/711a931201e91c91.
Report an issue: GitHub.