java.lang.RuntimeException: 无法创建应用程序com.example.MyApplication: androidx.work.WorkManagerInitializationException: 检测到重复的WorkManager初始化
java.lang.RuntimeException: Unable to create application com.example.MyApplication: androidx.work.WorkManagerInitializationException: Duplicate WorkManager initialization detected
ID: android/workmanager-initialization-failure-duplicate
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| WorkManager 2.9.0 | active | — | — | — |
| Android 12 (API 31) | active | — | — | — |
| Android 13 (API 33) | active | — | — | — |
| WorkManager 2.8.1 | active | — | — | — |
根因分析
WorkManager既通过ContentProvider自动初始化(Android 12+默认),又在Application.onCreate()中手动初始化,导致冲突,在应用启动时抛出异常。
English
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.
官方文档
https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration#remove-default-initializer解决方案
-
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); }
无效尝试
常见但无效的做法:
-
Remove manual WorkManager.initialize() call but keep custom configuration
70% 失败
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% 失败
Suppressing the exception does not resolve the underlying duplicate initialization; WorkManager may be in an inconsistent state.