Вы можете использовать DelegatingWorkerFactory
и добавить свой пользовательский WorkerFactory к нему.
Ваш пользовательский WorkerFactory должен будет проверить, передано ли имя класса в фабрика - это та, которую он хочет обработать, если нет, просто верните null
, и DelegatingWorkerFactory
вернется к фабрике рабочих по умолчанию, используя отражение.
Имейте в виду, что вам нужно добавить свой собственный WorkerFactory каждый раз, когда вы инициализируете WorkManager. Если вы этого не сделаете, и WorkManager попытается выполнить WorkRequest для вашего Worker (который обычно обрабатывается пользовательским WorkerFactory), он вернется к стандартному WorkerFactory и завершится ошибкой (вероятно, с исключением класса not found).
Мы используем DelegatingWorkerFactory
in IOsched , приложение для планирования, используемое для ввода-вывода, и Android Developer Summit. Код вашего пользовательского WorkerFactory будет выглядеть примерно так:
class ConferenceDataWorkerFactory(
private val refreshEventDataUseCase: RefreshConferenceDataUseCase
) : WorkerFactory() {
override fun createWorker(
appContext: Context,
workerClassName: String,
workerParameters: WorkerParameters
): ListenableWorker? {
return when (workerClassName) {
ConferenceDataWorker::class.java.name ->
ConferenceDataWorker(appContext, workerParameters, refreshEventDataUseCase)
else ->
// Return null, so that the base class can delegate to the default WorkerFactory.
null
}
}
}