在库和主机应用程序中初始化 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。
多次调用此方法会抛出异常。
我正在开发一个库,并在其中使用 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。
多次调用此方法会抛出异常。