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
92%Fix Rate
87%Confidence
1Evidence
2023-08-12First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 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-initializerWorkarounds
-
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> -
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); }
中文步骤
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>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:
-
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.
-
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.