{"record":{"id":"5fb028b5e32b4c12","repo":"bumptech/glide","slug":"cannot-register-already-registered-manager","errorCode":null,"errorMessage":"Cannot register already registered manager","messagePattern":"Cannot register already registered manager","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"library/src/main/java/com/bumptech/glide/Glide.java","lineNumber":682,"sourceCode":"    return glideContext.getRegistry();\n  }\n\n  boolean removeFromManagers(@NonNull Target<?> target) {\n    synchronized (managers) {\n      for (RequestManager requestManager : managers) {\n        if (requestManager.untrack(target)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  void registerRequestManager(RequestManager requestManager) {\n    synchronized (managers) {\n      if (managers.contains(requestManager)) {\n        throw new IllegalStateException(\"Cannot register already registered manager\");\n      }\n      managers.add(requestManager);\n    }\n  }\n\n  void unregisterRequestManager(RequestManager requestManager) {\n    synchronized (managers) {\n      if (!managers.contains(requestManager)) {\n        throw new IllegalStateException(\"Cannot unregister not yet registered manager\");\n      }\n      managers.remove(requestManager);\n    }\n  }\n\n  @Override\n  public void onTrimMemory(int level) {\n    trimMemory(level);\n    // when level is higher than TRIM_MEMORY_UI_HIDDEN, it indicates that the app is","sourceCodeStart":664,"sourceCodeEnd":700,"githubUrl":"https://github.com/bumptech/glide/blob/eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a/library/src/main/java/com/bumptech/glide/Glide.java#L664-L700","documentation":"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.","triggerScenarios":"registerRequestManager(requestManager) is called and managers.contains(requestManager) is true (duplicate registration).","commonSituations":"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.","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."],"exampleFix":"// before\nif (!registered) { glide.registerRequestManager(manager); registered = true }\n// but elsewhere the same manager registered again -> throws\n\n// after\nif (!managers.contains(manager)) {\n  glide.registerRequestManager(manager)\n}","handlingStrategy":"validation","validationCode":"// Guard registration against duplicates.\nfun registerOnce(glide: Glide, manager: RequestManager) {\n  // Glide.registerRequestManager is package-private; mirror the guard in your own tracking.\n  if (!registered.contains(manager)) {\n    glide.registerRequestManager(manager)\n    registered.add(manager)\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prefer Glide.with(...) which manages registration lifecycle internally.","Track registration state to avoid duplicate register calls.","Keep register/unregister balanced around lifecycle events."],"tags":["glide-core","requestmanager","lifecycle","registration","runtime"],"backgroundTag":null,"analyzedSha":"eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a","analyzedAt":"2026-08-14T01:43:54.821Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}