android runtime_error ai_generated true

java.lang.RuntimeException: Unable to create application com.example.MyApplication: androidx.work.WorkManagerInitializationException: Duplicate WorkManager initialization detected

ID: android/workmanager-initialization-failure-duplicate

Also available as: JSON · Markdown · 中文
92%Fix Rate
87%Confidence
1Evidence
2023-08-12First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
WorkManager 2.9.0 active
Android 12 (API 31) active
Android 13 (API 33) active
WorkManager 2.8.1 active

Root Cause

WorkManager is initialized both automatically via ContentProvider (default in Android 12+) and manually in Application.onCreate(), causing a conflict that throws an exception during app startup.

generic

中文

WorkManager既通过ContentProvider自动初始化(Android 12+默认),又在Application.onCreate()中手动初始化,导致冲突,在应用启动时抛出异常。

Official Documentation

https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration#remove-default-initializer

Workarounds

  1. 95% success Disable automatic initialization in AndroidManifest.xml by adding <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" tools:node="merge"> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
    Disable automatic initialization in AndroidManifest.xml by adding <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" tools:node="merge"> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
  2. 90% success Use WorkManager.initialize() only in Application.onCreate() after checking if already initialized via a flag. Example: if (!WorkManager.isInitialized()) { WorkManager.initialize(this, config); }
    Use WorkManager.initialize() only in Application.onCreate() after checking if already initialized via a flag. Example: if (!WorkManager.isInitialized()) { WorkManager.initialize(this, config); }

中文步骤

  1. Disable automatic initialization in AndroidManifest.xml by adding <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" tools:node="merge"> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
  2. Use WorkManager.initialize() only in Application.onCreate() after checking if already initialized via a flag. Example: if (!WorkManager.isInitialized()) { WorkManager.initialize(this, config); }

Dead Ends

Common approaches that don't work:

  1. Remove manual WorkManager.initialize() call but keep custom configuration 70% fail

    If custom configuration is needed (e.g., custom executor), removing the manual call means the auto-init uses default config, losing custom settings.

  2. Add try-catch around WorkManager.initialize() to suppress the exception 85% fail

    Suppressing the exception does not resolve the underlying duplicate initialization; WorkManager may be in an inconsistent state.