我使用定制的初始化与Android工作管理器一起使用。为此,我在清单文件中禁用了自动初始化,如下所示:
<provider
tools:replace="android:authorities"
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.work_manager_init"
android:enabled="false"
android:exported="false" />
而在应用程序代码中,我使用以下代码
private fun initWorkManager() {
WorkManager.initialize(this, Configuration.Builder().run {
setWorkerFactory(appComponent.daggerWorkerFactory())
build()
})
}
当我运行我的应用程序时,它可以正常工作。但是,当我使用roboletric测试需要通过RuntimeEnvironment.application
获取上下文的任何类时,会抛出此异常。
java.lang.IllegalStateException: WorkManager is already initialized.
Did you try to initialize it manually without disabling
WorkManagerInitializer? See WorkManager#initialize(Context,
Configuration) or the class levelJavadoc for more information.
initWorkManager()
方法被调用时会抛出异常,因为它不知道在清单文件中已经禁用了自动初始化,并且我的测试无法读取清单文件中的值。
如果有任何帮助或建议,将不胜感激。
WorkManager.initialize()
,我会得到相同的错误。 如果我不调用initialize(),我会得到```java.lang.IllegalStateException: WorkManager没有正确初始化。最可能的原因是您在清单中禁用了WorkManagerInitializer,但忘记在Application#onCreate或ContentProvider中调用WorkManager#initialize。``看起来这种情况没有好的解决方案。无论是否调用initialize()都会出现问题。陷入困境。 - Kabliz