# DelegatingWorkerFactory

Artifact: [androidx.work:work-runtime](https://developer.android.com/jetpack/androidx/releases/work) [View Source](https://cs.android.com/search?q=file:androidx/work/DelegatingWorkerFactory.kt+class:androidx.work.DelegatingWorkerFactory) Added in [2.1.0](https://developer.android.com/jetpack/androidx/releases/work#2.1.0)

*** ** * ** ***


```
public class DelegatingWorkerFactory extends WorkerFactory
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.work.WorkerFactory](https://developer.android.com/reference/androidx/work/WorkerFactory) ||
|   | ↳ | [androidx.work.DelegatingWorkerFactory](https://developer.android.com/reference/androidx/work/DelegatingWorkerFactory) |

*** ** * ** ***

A `https://developer.android.com/reference/androidx/work/WorkerFactory` which delegates to other factories. Factories can register themselves as delegates, and they will be invoked in order until a delegated factory returns a non-null `https://developer.android.com/reference/androidx/work/ListenableWorker` instance.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/work/DelegatingWorkerFactory#DelegatingWorkerFactory()()` |

| ### Public methods |
|---|---|
| `final void` | `https://developer.android.com/reference/androidx/work/DelegatingWorkerFactory#addFactory(androidx.work.WorkerFactory)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/work/WorkerFactory workerFactory)` Adds a `https://developer.android.com/reference/androidx/work/WorkerFactory` to the list of delegates. |
| `final https://developer.android.com/reference/androidx/work/ListenableWorker` | `https://developer.android.com/reference/androidx/work/DelegatingWorkerFactory#createWorker(android.content.Context,kotlin.String,androidx.work.WorkerParameters)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html appContext, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html workerClassName, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/work/WorkerParameters workerParameters )` Override this method to implement your custom worker-creation logic. |

## Public constructors

### DelegatingWorkerFactory

Added in [2.1.0](https://developer.android.com/jetpack/androidx/releases/work#2.1.0)

```
public DelegatingWorkerFactory()
```

## Public methods

### addFactory

Added in [2.1.0](https://developer.android.com/jetpack/androidx/releases/work#2.1.0)

```
public final void addFactory(@NonNull WorkerFactory workerFactory)
```

Adds a `https://developer.android.com/reference/androidx/work/WorkerFactory` to the list of delegates.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/work/WorkerFactory workerFactory` | The `https://developer.android.com/reference/androidx/work/WorkerFactory` instance. |

### createWorker

```
public final ListenableWorker createWorker(
    @NonNull Context appContext,
    @NonNull String workerClassName,
    @NonNull WorkerParameters workerParameters
)
```

Override this method to implement your custom worker-creation logic. Use `https://developer.android.com/reference/androidx/work/Configuration.Builder#setWorkerFactory(androidx.work.WorkerFactory)` to use your custom class.

Throwing an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-exception/index.html` here and no `https://developer.android.com/reference/androidx/work/ListenableWorker` will be created. If a `https://developer.android.com/reference/androidx/work/WorkerFactory` is unable to create an instance of the `https://developer.android.com/reference/androidx/work/ListenableWorker`, it should return `null` so it can delegate to the default `https://developer.android.com/reference/androidx/work/WorkerFactory`.

Returns a new instance of the specified `workerClassName` given the arguments. The returned worker must be a newly-created instance and must not have been previously returned or invoked by WorkManager. Otherwise, WorkManager will throw an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html appContext` | The application context |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html workerClassName` | The class name of the worker to create |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/work/WorkerParameters workerParameters` | Parameters for worker initialization |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/work/ListenableWorker` | A new `https://developer.android.com/reference/androidx/work/ListenableWorker` instance of type `workerClassName`, or `null` if the worker could not be created |