在库和主机应用程序中初始化WorkManager自定义配置- Android库项目



我正在开发一个库,并在其中使用WorkManager 2.5.0
因为我想从库端自定义WorkManager的配置,我在AndroidManifest.xml中删除了WorkManager -init,并添加了这样的自定义配置,如文档

中所描述的按需初始化
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />

[in AndroidManifest.xml in my library module]

WorkManager.initialize(context, Configuration.Builder().setMinimumLoggingLevel(Log.INFO).build())  

[在我的库模块中的一个类中]

现在,它能够正常工作的一个图书馆。然而,当主机应用程序也想自定义WorkManager的配置时,问题就来了。

当主机应用程序也使用WorkManager 2.5.0时,

WorkManager.initialize(context, Configuration.Builder().setMinimumLoggingLevel(Log.VERBOSE).build())

应用程序崩溃与这一行代码抛出一个异常与java.lang.IllegalStateException: WorkManager is already initialized.
我试图删除workmanager-init在AndroidManifest.xml在主机应用程序,但它仍然给我同样的错误。

主机应用程序是否可以自定义WorkManager的配置以及我的库自定义它?

WorkManager是一个单例,它只能初始化一次;或在库中或在应用程序中

我建议按照文档指南将WorkManager的配置委托给应用程序。

通过阅读您正在使用的方法的描述,您将得到答案。

"用于使用自定义配置对WorkManager单例进行一次性初始化。默认情况下,这个方法不应该被调用,因为WorkManager是自动初始化的。要自己初始化WorkManager,请遵循以下步骤:

在清单中禁用androidx.work.WorkManagerInitializer。在application# onCreate或ContentProvider中调用这个方法。注意,这个方法必须在这两个地方之一调用,否则你可能会在getInstance(Context)中得到NullPointerException。

当尝试在直接启动模式下初始化时,该方法抛出一个IllegalStateException。

如果多次调用该方法,将抛出异常。">

最新更新