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.