Вторая инициализация WorkManager - PullRequest
1 голос
/ 21 января 2020

Мне нужно инициализировать 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 внедрен кинжалом, и я не смог использовать AndroidInjector в Content Provider, поскольку он всегда не инициализировался:

Причина: kotlin. UninitializedPropertyAccessException: свойство lateinit androidInjector не было инициализировано

Я прочитал здесь , что существует интерфейс HasContentProviderInjector:
, но я не могу найти его в моем Dagger2 версии 2.24 и Я не верю, что это должно работать, потому что, если я правильно понимаю, ContentProvider создается перед объектом Application.

Что мне делать? Попробуйте очистить объектами отражения: sDelegatedInstance != null && sDefaultInstance != null или что-то еще?

1 Ответ

1 голос
/ 21 января 2020

WorkManager является одноэлементным, и его можно инициализировать только один раз.
Вы можете использовать инициализацию по умолчанию или собственную инициализацию. Чтобы иметь собственную конфигурацию, вам нужно отключить настройку по умолчанию, как описано в документации .

...