【问题标题】:Second initialization of WorkManagerWorkManager的第二次初始化
【发布时间】:2020-01-21 10:47:52
【问题描述】:

我不仅要初始化 WorkerManager 一次,因为在运行时某些参数可能会改变(WorkerFactory())。所以我需要打电话

val configuration = Configuration.Builder()
            .setWorkerFactory(aggregatingWorkerFactory)
            .build()

WorkManager.initialize(context!!, configuration)

但是,第二次调用它会引发 IllegalStateException。

我读到我可以在 ContentProvider 上初始化它: https://medium.com/@programmerr47/custom-work-manager-initialization-efdd2afa6459 但是我的 workerFactory 对象是由 dagger 注入的,我无法在 Content Provider 上使用 AndroidInjector,因为它始终没有被初始化:

原因:kotlin.UninitializedPropertyAccessException:lateinit 属性 androidInjector 尚未初始化

我读到here有一个接口HasContentProviderInjector
但我在我的 Dagger2 2.24 版中找不到它,我不相信它应该工作,因为如果我理解正确 ContentProvider 是在 Application 对象之前创建的。

我该怎么办?尝试通过反射对象清除: sDelegatedInstance != null && sDefaultInstance != null 还是别的什么?

【问题讨论】:

  • 不同配置的用例是什么?
  • A/B 测试和业务逻辑。
  • 业务逻辑是什么意思?您要更改哪个配置?

标签: android android-contentprovider dagger-2 android-workmanager


【解决方案1】:

WorkManager 是一个单例,它只能被初始化一次。
您可以进行默认初始化或您自己的初始化。要拥有自己的配置,您需要按照in the documentation 所述禁用默认配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 2022-12-03
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多