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

Initialize WorkManager custom configuration in library and host app - Android library project

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

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

[在我的库模块中 AndroidManifest.xml]

    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.
抛出异常,应用程序因这行代码而崩溃 我尝试在主机应用程序的 AndroidManifest.xml 中删除 workmanager-init,但它仍然给我同样的错误。

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

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

我建议将 WorkManager 的配置委托给应用程序 documentation guide 关于这个主题。

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

”用于使用自定义Configuration对WorkManager单例进行一次性初始化。默认情况下不应调用此方法,因为WorkManager会自动初始化。要自行初始化WorkManager,请按照以下步骤操作:

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

尝试在直接启动模式下初始化时,此方法会抛出 IllegalStateException。

多次调用此方法会抛出异常。