Я пишу библиотеку для Android, в которой используется WorkManager. Где-то в коде я называю что-то вроде этого:
val uploadTripRequest = OneTimeWorkRequest.Builder(UploadTripWorker::class.java)
.setConstraints(someConstraints)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, OneTimeWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
.build()
WorkManager.getInstance(context)
.enqueueUniqueWork(WORKER_NAME, ExistingWorkPolicy.REPLACE, uploadTripRequest)
В моем build.gradle у меня есть: implementation 'androidx.work:work-runtime:2.2.0'
В норме все работает отлично. Проблемы возникают, когда клиентское приложение вызывает https://developer.android.com/reference/kotlin/androidx/work/WorkManager.html#initialize, например:
WorkManager.initialize(context, Configuration.Builder().setWorkerFactory(myWorkerFactory).build())
Когда это вызывается, WorkManager из моей библиотеки не работает должным образом. doWork
метод не вызывается в моем UploadTripWorker
, но выполняется на рабочем месте, предоставленном клиентским myWorkerFactory
.
С моей точки зрения, WorkManager
непригоден для использования в библиотеке, поскольку это синглтон, и кто-то может изменить его поведение с помощью метода initialize
. Но я надеюсь, что ошибаюсь.
Как я могу решить эту проблему? Конечно, я не могу сказать всем своим клиентам не использовать метод WorkManager.initialize()
.