【问题标题】:Initialize WorkManager custom configuration in library and host app - Android library project在库和宿主应用程序中初始化 WorkManager 自定义配置 - Android 库项目
【发布时间】:2021-10-04 22:57:59
【问题描述】:

我正在开发一个库并在其中使用 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 的配置以及我的库自定义它吗?

【问题讨论】:

    标签: android android-workmanager library-project


    【解决方案1】:

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

    我建议将 WorkManager 的配置委托给该主题的 documentation guide 之后的应用程序。

    【讨论】:

      【解决方案2】:

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

      "用于一次性使用自定义Configuration对WorkManager单例进行初始化。默认不调用该方法,因为WorkManager是自动初始化的。要自己初始化WorkManager,请按以下步骤操作:

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

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

      这个方法如果被多次调用会抛出异常。”

      【讨论】:

        猜你喜欢
        • 2022-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多