# AbstractSavedStateViewModelFactory

Artifact: [androidx.lifecycle:lifecycle-viewmodel-savedstate](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/AbstractSavedStateViewModelFactory.android.kt+class:androidx.lifecycle.AbstractSavedStateViewModelFactory) Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) Deprecated in [2.9.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0)

*** ** * ** ***


```
public abstract class AbstractSavedStateViewModelFactory implements ViewModelProvider.Factory
```

<br />

*** ** * ** ***

> [!CAUTION]
> **This class is deprecated.**   
> Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`.

Abstract `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory` that creates a `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` for every requested `https://developer.android.com/reference/androidx/lifecycle/ViewModel`.

Subclasses implement the abstract `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)` method to instantiate `https://developer.android.com/reference/androidx/lifecycle/ViewModel`s.

**Deprecated:** Use `https://developer.android.com/reference/androidx/lifecycle/viewmodel/package-summary#viewModelFactory(kotlin.Function1)` or implement `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory` directly, combined with `https://developer.android.com/reference/androidx/lifecycle/package-summary#(androidx.lifecycle.viewmodel.CreationExtras).createSavedStateHandle()`. This base class creates a `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` for every `https://developer.android.com/reference/androidx/lifecycle/ViewModel`, even when unnecessary, causing overhead.

For example:

```
viewModelFactory { initializer { MyViewModel(createSavedStateHandle()) } }
```

## Summary

| ### Public constructors |
|---|
| `[AbstractSavedStateViewModelFactory](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#AbstractSavedStateViewModelFactory())()` **This method is deprecated.** Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`. |
| `[AbstractSavedStateViewModelFactory](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#AbstractSavedStateViewModelFactory(androidx.savedstate.SavedStateRegistryOwner,android.os.Bundle))( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner owner, https://developer.android.com/reference/android/os/Bundle.html defaultArgs )` **This method is deprecated.** Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`. |

| ### Public methods |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> [create](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass)` **This method is deprecated.** Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> [create](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras))( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras extras )` **This method is deprecated.** Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`. |

| ### Protected methods |
|---|---|
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull T` | `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> [create](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(kotlin.String,java.lang.Class,androidx.lifecycle.SavedStateHandle))( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html key, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle handle )` **This method is deprecated.** Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`. |

### Inherited methods

From [androidx.lifecycle.ViewModelProvider.Factory](https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory) `@https://developer.android.com/reference/androidx/annotation/NonNull T` `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> [create](https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras))(
@https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass,
@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras extras
)`

**This method is deprecated.** Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`.

## Public constructors

### AbstractSavedStateViewModelFactory

Added in [2.5.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.0) Deprecated in [2.9.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0)

```
public [AbstractSavedStateViewModelFactory](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#AbstractSavedStateViewModelFactory())()
```

> [!CAUTION]
> **This method is deprecated.**   
> Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`.

Constructs a new `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory`.

When constructed this way, the component for which the `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` is scoped must have called `https://developer.android.com/reference/androidx/lifecycle/package-summary#(androidx.savedstate.SavedStateRegistryOwner).enableSavedStateHandles()`. See `https://developer.android.com/reference/androidx/lifecycle/package-summary#(androidx.lifecycle.viewmodel.CreationExtras).createSavedStateHandle()` for more details.

### AbstractSavedStateViewModelFactory

Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) Deprecated in [2.9.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0)

```
public [AbstractSavedStateViewModelFactory](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#AbstractSavedStateViewModelFactory(androidx.savedstate.SavedStateRegistryOwner,android.os.Bundle))(
    @NonNull SavedStateRegistryOwner owner,
    Bundle defaultArgs
)
```

> [!CAUTION]
> **This method is deprecated.**   
> Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`.

Constructs a new `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner owner` | `https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner` that will provide restored state for created `https://developer.android.com/reference/androidx/lifecycle/ViewModel`s. Must implement `https://developer.android.com/reference/androidx/lifecycle/ViewModelStoreOwner` to support state retention. |
| `https://developer.android.com/reference/android/os/Bundle.html defaultArgs` | default values to populate the `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` if no state is restored |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#(androidx.savedstate.SavedStateRegistryOwner,android.os.Bundle)` does not implement `https://developer.android.com/reference/androidx/lifecycle/ViewModelStoreOwner` |

## Public methods

### create

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

```
public @NonNull T <T extends ViewModel> [create](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class))(@NonNull Class<@NonNull T> modelClass)
```

> [!CAUTION]
> **This method is deprecated.**   
> Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`.

Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass` | `https://developer.android.com/reference/java/lang/Class.html` of the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` to create |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | new `https://developer.android.com/reference/androidx/lifecycle/ViewModel` instance of type `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class)` |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the given `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class)` is a local or anonymous class |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unsupported-operation-exception/index.html` | if this factory was constructed with the empty constructor, and therefore has no `https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner` |

### create

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

```
public @NonNull T <T extends ViewModel> [create](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras))(
    @NonNull Class<@NonNull T> modelClass,
    @NonNull CreationExtras extras
)
```

> [!CAUTION]
> **This method is deprecated.**   
> Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`.

Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass` | `https://developer.android.com/reference/java/lang/Class.html` of the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` to create |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras extras` | `https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras` passed to the `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory` to create the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | new `https://developer.android.com/reference/androidx/lifecycle/ViewModel` instance of type `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)` |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if the `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)` do not contain `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.NewInstanceFactory.Companion#VIEW_MODEL_KEY()` |

## Protected methods

### create

Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) Deprecated in [2.9.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0)

```
protected abstract @NonNull T <T extends ViewModel> [create](https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(kotlin.String,java.lang.Class,androidx.lifecycle.SavedStateHandle))(
    @NonNull String key,
    @NonNull Class<@NonNull T> modelClass,
    @NonNull SavedStateHandle handle
)
```

> [!CAUTION]
> **This method is deprecated.**   
> Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`.

Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html key` | key associated with the requested `https://developer.android.com/reference/androidx/lifecycle/ViewModel` |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass` | `https://developer.android.com/reference/java/lang/Class.html` of the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` to create |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle handle` | `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` associated with the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` to create |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | new `https://developer.android.com/reference/androidx/lifecycle/ViewModel` instance of type `https://developer.android.com/reference/androidx/lifecycle/AbstractSavedStateViewModelFactory#create(kotlin.String,java.lang.Class,androidx.lifecycle.SavedStateHandle)` |