第二次初始化WorkManager

时间:2020-01-21 10:47:52

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

我不仅必须初始化一次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对象是由匕首注入的,因此我无法在Content Provider上使用AndroidInjector,因为它始终未初始化:

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

我读到here,发现有一个接口HasContentProviderInjector
但是我无法在Dagger2 2.24版中找到它,并且我认为它不起作用,因为如果我正确理解ContentProvider是在Application对象之前创建的。

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

1 个答案:

答案 0 :(得分:1)

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