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 is

View on GitHub (pinned to eb14a895d8)

Solutions

  1. Track whether you have already registered a RequestManager for a given lifecycle owner before registering again.
  2. Prefer Glide.with(context/fragment/activity) which manages registration internally, rather than manual registration.
  3. Ensure unregister is paired with register so re-registration after a proper teardown is valid.
  4. 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

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


AI-assisted analysis of bumptech/glide@eb14a895d8 (2026-08-14). Data as JSON: /api/errors/5fb028b5e32b4c12. Report an issue: GitHub.