Lifecycle
This table lists all the artifacts in the androidx.lifecycle group.
| Artifact | Stable Release | Release Candidate | Beta Release | Alpha Release | 
|---|---|---|---|---|
| lifecycle-* | 2.9.4 | - | 2.10.0-beta01 | - | 
| lifecycle-viewmodel-navigation3 | - | - | 2.10.0-beta01 | - | 
Declaring dependencies
To add a dependency on Lifecycle, you must add the Google Maven repository to your project. Read Google's Maven repository for more information.
Add the dependencies for the artifacts you need in the build.gradle file for
your app or module:
Kotlin
Groovy
dependencies { def lifecycle_version = "2.9.4" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // ViewModel integration with Navigation3 implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-beta01" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.9.4" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // ViewModel integration with Navigation3 implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-beta01") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.9.4" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.9.4" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
For more information about dependencies, see Add Build Dependencies.
Feedback
Your feedback helps make Jetpack better. Let us know if you discover new issues or have ideas for improving this library. Please take a look at the existing issues in this library before you create a new one. You can add your vote to an existing issue by clicking the star button.
See the Issue Tracker documentation for more information.
Version 2.10
Version 2.10.0-beta01
October 22, 2025
androidx.lifecycle:lifecycle-*:2.10.0-beta01 is released. Version 2.10.0-beta01 contains these commits.
API Changes
- ViewModelStoreNavEntryDecoratorDefaulthas been renamed to- ViewModelStoreNavEntryDecoratorDefaults, with an 's'. (I6d27b, b/444447434)
Bug Fixes
- rememberLifecycleOwnerno longer crashes if the owner receives an- Lifecycle.Event.ON_DESTROYevent before moving to- Lifeycle.State.CREATED. (I6f98e, b/444594991)
Version 2.10.0-alpha05
October 08, 2025
androidx.lifecycle:lifecycle-*:2.10.0-alpha05 is released. Version 2.10.0-alpha05 contains these commits.
API Changes
- The removeViewModelStoreOnPopCallback()is now part of aViewModelStoreNavEntryDecoratorDefaultobject which is where other platforms and implementations can call the default. (Ia1f23, b/444447434)
- Refactored ViewModelStoreNavEntryDecoratorfrom a function to a class to better reflect its functionality as a factory forNavEntryDecorator, and renamed the decorator'sshouldRemoveViewModelStoreparameter toremoveViewModelStoreOnPopto clarify that this callback is invoked only when an entry is popped from thebackStack. (Iefdc5, b/444447434)
Version 2.10.0-alpha04
September 24, 2025
androidx.lifecycle:lifecycle-*:2.10.0-alpha04 is released. Version 2.10.0-alpha04 contains these commits.
API Changes
- Refactor the LifecycleOwnercomposable torememberLifecycleOwner. The function now returns theLifecycleOwnerdirectly. To provide this owner to a sub-composition, useCompositionLocalProvider. (Ic57f0, b/444446629)
- Add KMP stubs to lifecycle-viewmodel-navigation3 to enable JetBrains to provide forks that fill these targets and thus support CMP. (I44a4c)
Version 2.10.0-alpha03
August 27, 2025
androidx.lifecycle:lifecycle-*:2.10.0-alpha03 is released. Version 2.10.0-alpha03 contains these commits.
API Changes
- Update Compose to 1.9.0. (I2b9de)
Version 2.10.0-alpha02
August 13, 2025
androidx.lifecycle:lifecycle-*:2.10.0-alpha02 is released. Version 2.10.0-alpha02 contains these commits.
New Features
- The - LifecycleOwnercomposable can now create a standalone root lifecycle. By (explicitly) setting- parent = null, the new lifecycle operates independently of any host (like an- Activity,- Fragmentor- NavBackStackEntry). It starts as soon as the composable enters the composition and is automatically destroyed when it leaves. (I8dfbe, b/433659048)- @Composable fun IndependentComponent() { // Create a standalone lifecycle, not tied to the parent Activity/Fragment. LifecycleOwner(parent = null) { val rootLifecycle = LocalLifecycleOwner.current.lifecycle } }
API Changes
- In the LifecycleOwnercomposable, theparentLifecycleOwnerparameter has been renamed toparent. (I080bc)
Bug Fixes
- LifecycleOwnercomposable now correctly moves its lifecycle to- DESTROYEDupon disposal. This prevents potential leaks for external code that holds a reference to the lifecycle. (I9e5b7, b/433659048)
- Moving the default minSdk from API 21 to API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
External Contribution
- Remove unnecessary internal backing fields from LifecycleOwner. Thanks Jake Wharton for the contribution. (Ideddb)
Version 2.10.0-alpha01
July 30, 2025
androidx.lifecycle:lifecycle-*:2.10.0-alpha01 is released. Version 2.10.0-alpha01 contains these commits.
New Features
- Add a - LifecycleOwnercomposable to enable creating scoped lifecycles directly within the UI. This is useful for components that need to manage their own lifecycles independently. For an example of how Navigation3 integrates this new composable, see aosp/3708610. (76cbf7)- @Composable fun MyComposable() { LifecycleOwner( maxLifecycle = RESUMED, parentLifecycleOwner = LocalLifecycleOwner.current, ) { val childLifecycleOwner = LocalLifecycleOwner.current } }
API Changes
- Add a builder factory function for CreationExtras, providing a more convenient and idiomatic Kotlin API. (Iab2bd)
- Add native support for nullable types in SavedStateHandle.saved, simplifying saving and restoring nullable properties. (I54d69, b/421325690)
- Mark SavedStateHandleconstructors as@VisibleForTesting. (Iff0e0, b/408002794)
Version 2.9
Version 2.9.4
September 17, 2025
androidx.lifecycle:lifecycle-*:2.9.4 is released. Version 2.9.4 contains these commits.
Bug Fixes
- Fixed an error with the Compose Compiler plugin not being applied that caused Lifecycle KMP artifacts to be broken. (Ie95bc, b/443096483, b/443965665)
Version 2.9.3
August 27, 2025
androidx.lifecycle:lifecycle-*:2.9.3 is released. Version 2.9.3 contains these commits.
New Features
- Add new Kotlin Multiplatform (KMP) targets to Lifecycle *-composeartifacts. Lifecycle now supports the following platforms in total: JVM (Android and Desktop), Native (Linux, iOS, watchOS, macOS, MinGW), and Web (JavaScript, WasmJS). (I0a0e4)
Bug Fixes
- Update androidx.annotationto 1.9.1 (Ic9e4f, b/397701294)
Version 2.9.2
July 16, 2025
androidx.lifecycle:lifecycle-*:2.9.2 is released. Version 2.9.2 contains these commits.
Bug Fixes
- Added new Kotlin Multiplatform (KMP) targets to Lifecycle artifacts. Lifecycle now supports the following platforms in total: JVM (Android and Desktop), Native (Linux, iOS, watchOS, macOS, MinGW), and Web (JavaScript, WasmJS). Note that no new KMP targets have been added to the *-composeartifacts, as this depends on the stable release of Compose 1.9. (I01cb8).
Dependency updates
- Lifecycle now depends on Annotation 1.9.1to enable support for the new KMP targets (Ic9e4f, b/397701294).
Version 2.9.1
June 4, 2025
androidx.lifecycle:lifecycle-*:2.9.1 is released. Version 2.9.1 contains these commits.
Bug Fixes
- Fix SavedStateHandle.remove(key)not clearingSavedStateHandle.getMutableStateFlow(key)states. (d5f939, b/418746333)
Version 2.9.0
May 7, 2025
androidx.lifecycle:lifecycle-*:2.9.0 is released. Version 2.9.0 contains these commits.
Important changes since 2.8.0
- A new androidx.lifecycle:lifecycle-viewmodel-testingKMP artifact is available that provides aViewModelScenarioclass for testingViewModelsin isolation, with support foronClearedandSavedStateHandleas well as testing process death and recreation viarecreate().
- Add getMutableStateFlowtoSavedStateHandleto return aMutableStateFlow. This new function is key-exclusive and cannot be used withgetLiveData. An exception will be thrown if you try to use both to access the same state.
- CreationExtrasnow includes map-like operator overloads to enable idiomatic manipulation of content in Kotlin. It allows the use of- in,- +=, and- +with- CreationExtras.
KotlinX Serialization Support
- With the support of KotlinX Serialization added in SavedState - 1.3.0, we have introduced- saved, a lazy property delegate, to make it easy to store- @Serializableclasses in a- SavedStateHandleand have those classes automatically be restored across process death and recreation. Please note the- saveddelegate is lazy and will not call the- initlambda or save anything into the- SavedStateHandleuntil it is accessed.- @Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Kotlin Multiplatform
- The lifecycle-testingmodule is now KMP compatible including APIs likeTestLifecycleOwner.
- The lifecycle-viewmodel-savedstatemodule is now KMP compatible including APIs likeSavedStateHandle.
- The androidx.compose.ui.platform.LocalLifecycleOwneris now available in the common source set.
- NewInstanceFactoryis now available on JVM Desktop and Android targets.
Behavior Changes
- The Lifecycle.DESTROYEDstate is terminal, and any attempt to move aLifecyclefrom it to any other state will now result in anIllegalStateException.
- SavedStateHandleno longer includes any- SavedStateProvider.saveState()where the returned- Bundleis empty.
Version 2.9.0-rc01
April 23, 2025
androidx.lifecycle:lifecycle-*:2.9.0-rc01 is released. Version 2.9.0-rc01 contains these commits.
Lint API Compatibility Warning
- JetBrains changed KaCallableMemberCallfrom a class to an interface, which breaks binary compatibility. This can cause crashes if your project’s AGP version differs from the version used to compile lint checks. This update was made in aosp/3577172 but was missing from the release notes — we’re clarifying it here. Recommended fix: Update to the latest stable AGP. If you can’t fully update, useandroid.experimental.lint.versionto align lint checks with your AGP version — see Compose Runtime behavior changes for details.
Version 2.9.0-beta01
April 9, 2025
androidx.lifecycle:lifecycle-*:2.9.0-beta01 is released. Version 2.9.0-beta01 contains these commits.
API Changes
- Lifecycle ViewModel Composenow uses the same Kotlin Multiplatform setup as Compose Runtime 1.7.1 and higher - the- -desktopartifacts are now removed and- -jvmStubsand- -linuxx64Stubsartifacts have been added. None of these targets are meant to be used, they are placeholders to help Jetbrains Compose efforts. (I5cb14, b/406592090)
Dependency Updates
- This library now targets Kotlin 2.0 language level and requires KGP 2.0.0 or newer. (Idb6b5)
- Lifecycle ViewModel Composenow depends on Compose 1.7.8. (I5cb14, b/406592090)
Version 2.9.0-alpha13
March 26, 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha13 is released with no notable public changes. Version 2.9.0-alpha13 contains these commits.
Version 2.9.0-alpha12
March 12, 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha12 is released. Version 2.9.0-alpha12 contains these commits.
API Changes
- Add @MainThreadannotation toViewModelProvider.getin all supported KMP platforms. (I7e8dd, b/397736115)
- Rename SavedState*DelegatestoSavedState*Delegate. (I8589b, b/399629301)
Version 2.9.0-alpha11
February 26, 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha11 is released. Version 2.9.0-alpha11 contains these commits.
API Changes
- Add SavedStateConfigparameter tosaved()delegates (I39b3a)
Version 2.9.0-alpha10
February 12, 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha10 is released. Version 2.9.0-alpha10 contains these commits.
API Changes
- Move MutableStateSerializertosavedstate-composefromlifecycle-viewmodel-compose. (I4f690, b/378895074)
External Contribution
- Adds a new Lint issue for calling Lifecycle::currentStatein composition, instead suggesting usingcurrentStateAsalue().valueto ensure that changes in the Lifecycle state correctly cause recomposition. Thanks Steven Schoen! (Iad484)
Version 2.9.0-alpha09
January 29, 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha09 is released. Version 2.9.0-alpha09 contains these commits.
New Features
- Add MutableStateSerializerfor serializingandroidx.compose.runtime.MutableState. (Idfc48, b/378895074)
API Changes
- Replace overloaded SavedStateHandle.saved()delegate functions with default parameters (Icd1c1)
- AbstractSavedStateViewModelFactoryis deprecated as it creates a- SavedStateHandlefor every- ViewModel, causing unnecessary overhead. Use- ViewModelProvider.Factorywith- CreationExtras.createSavedStateHandleinstead for more efficient- ViewModelcreation. (Ia920b, b/388590327)
Version 2.9.0-alpha08
December 11, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha08 is released. Version 2.9.0-alpha08 contains these commits.
New Features
- Add ViewModelScenario.recreateto simulate a System Process Death recreating theViewModelunder test and all associated components. (Id6a69, b/381063087)
- LifecycleOwnerand- ViewModelStoreOwnerinstances retrieved via their respective- findViewTreeAPIs can now be resolved through disjoint parents of a view, such as a- ViewOverlay. See the release notes of core or the documentation in- ViewTree.setViewTreeDisjointParentfor more information on disjoint view parents. (I800f4)
API Changes
- Make the namings and package organization more consistent with SavedStateRegistryOwnerDelegate(I8c135, b/376026744)
Bug Fixes
- This library now uses JSpecify nullness annotations, which are type-use. Kotlin developers should use the following compiler argument to enforce correct usage: -Xjspecify-annotations=strict(this is the default starting with version 2.1.0 of the Kotlin compiler). (Ie4340, b/326456246)
- Document ViewModel.onClearedclearing sequence. (I586c7, b/363984116)
Version 2.9.0-alpha07
November 13, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha07 is released. Version 2.9.0-alpha07 contains these commits.
Kotlin Multiplatform Compatibility
- Lifecycle ViewModel SavedStateis now KMP compatible. This allows you to useSavedStateHandlein common code. (Ib6394, b/334076622)
KotlinX Serialization Support
- With the support of KotlinX Serialization added in SavedState - 1.3.0-alpha05, we have introduced- saved, a lazy property delegate, to make it easy to store- @Serializableclasses in a- SavedStateHandleand have those classes automatically be restored across process death and recreation. Please note the- saveddelegate is lazy and will not call the- initlambda or save anything into the- SavedStateHandleuntil it is accessed. (I47a88, b/376026744)- @Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
API Changes
- Add getMutableStateFlowtoSavedStateHandleto return aMutableStateFlow. This new function is key-exclusive and cannot be used withgetLiveData. An exception will be thrown if you try to use both to access the same state. (I04a4f, b/375408415)
Version 2.9.0-alpha06
October 30, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha06 is released. Version 2.9.0-alpha06 contains these commits.
Behavior Changes
- The Lifecycle.DESTROYEDstate is terminal, and any attempt to move aLifecyclefrom it to any other state will now result in anIllegalStateException. (I116c4, b/370577987)
- SavedStateHandleno longer includes any- SavedStateProvider.saveState()where the returned- Bundleis empty. (I910b5, b/370577987)
Bug Fixes
- Lifecycle.eventFlownow correctly complete when- Lifecycleis- DESTROYED(I293b2, b/374043130)
Version 2.9.0-alpha05
October 16, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha05 is released with no notable changes. Version 2.9.0-alpha05 contains these commits.
Version 2.9.0-alpha04
October 2, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha04 is released. Version 2.9.0-alpha04 contains these commits.
Kotlin Multiplatform
- The lifecycle-viewmodel-savedstatemodule is now configured to be KMP compatible in preparation for APIs likeSavedStateHandlebeing made available in the common source set in a future release. (I503ed, I48764, b/334076622)
Version 2.9.0-alpha03
September 18, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha03 is released. Version 2.9.0-alpha03 contains these commits.
Bug Fixes
- From Lifecycle 2.8.6: TheNullSafeMutableLiveDataLint error has improved support for smart casts, avoiding false positives. (85fed6, b/181042665)
Dependency Updates
- From Lifecycle 2.8.6: Lifecycle Runtime Compose now depends on Compose Runtime1.7.1
- Lifecycle Runtime now depends on ProfileInstaller 1.4.0
Version 2.9.0-alpha02
September 4, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha02 is released. Version 2.9.0-alpha02 contains these commits.
Bug Fixes
- From Lifecycle 2.8.5: Update theandroidx.lifecycle.ReportFragmentProGuard rules to allow obfuscation . (ff898e1)
External Contribution
- Move androidx.compose.ui.platform.LocalLifecycleOwnerto common source set (KMP). Thanks Ivan Matkov from JetBrains for the contribution. (8cd5d03)
- From Lifecycle 2.8.5: SavedStateHandle.saveable` extension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. (0d78ea6)
Version 2.9.0-alpha01
August 7, 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha01 is released. Version 2.9.0-alpha01 contains these commits.
Kotlin Multiplatform
- lifecycle-testingis now KMP compatible. (Iea41e)
- Add support for linuxArm64kotlin multiplatform target (I139d3, b/338268719)
New Features
- A new androidx.lifecycle:lifecycle-viewmodel-testingKMP artifact is available that provides aViewModelScenarioclass for testing ViewModels in isolation, with support foronCleared(all platforms) andSavedStateHandle(Android only). (337f68d, c9b3409, 9799a95c, b/264602919)
- Creating a ViewModelwithViewModelProvideris now thread safe;@MainThreadannotations have been removed. (Ifd978, b/237006831)
API Changes
- Add the CreationExtras.Key()factory function to simplify the creation of anonymousCreationExtras.Keyobjects. (I970ee)
- CreationExtrasnow includes map-like operator overloads to enable idiomatic manipulation of content in Kotlin. It allows the use of- in,- +=, and- +with- CreationExtras. (Ib4353)
- CreationExtrasnow implements- equals,- hashCode, and- toStringmethods. (Ib4353)
- NewInstanceFactoryis now available on JVM Desktop and Android targets. (d3d0892)
- Inline extension property to expose underlying Application safely in Kotlin language version 2.0 (I39df2)
Bug Fixes
- Removed manual outlining of access to new platform APIs since this happens automatically via API modeling when using R8 with AGP 7.3 or later (e.g. R8 version 3.3) and for all builds when using AGP 8.1 or later (e.g. D8 version 8.1). Clients who are not using AGP are advised to update to D8 version 8.1 or later. See this article for more details. (If6b4c, b/345472586)
Version 2.8
Version 2.8.7
October 30, 2024
androidx.lifecycle:lifecycle-*:2.8.7 is released. Version 2.8.7 contains these commits.
API Changes
- androidx.compose.ui.platform.LocalLifecycleOwneris now available in the common source set (KMP). (6a3f5b3)
- lifecycle-runtime-compose:- desktopartifacts were removed and- -jvmStubsand- -linuxx64Stubsartifacts were added. None of these targets are meant to be used, they are placeholders to help Jetbrains Compose efforts. (6a3f5b3)
Version 2.8.6
September 18, 2024
androidx.lifecycle:lifecycle-*:2.8.6 is released. Version 2.8.6 contains these commits.
Bug Fixes
- The NullSafeMutableLiveDataLint error has improved support for smart casts, avoiding false positives. (85fed6, b/181042665)
Dependency Updates
- Lifecycle Runtime Compose now depends on Compose Runtime 1.7.1
Version 2.8.5
September 4, 2024
androidx.lifecycle:lifecycle-*:2.8.5 is released. Version 2.8.5 contains these commits.
Bug Fixes
- Update the androidx.lifecycle.ReportFragmentProGuard rules to allow obfuscation . (ff898e1)
External Contribution
- SavedStateHandle.saveableextension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. (0d78ea6)
Version 2.8.4
July 24, 2024
androidx.lifecycle:lifecycle-*:2.8.4 is released. Version 2.8.4 contains these commits.
Bug Fixes
- LiveData.asFlow()now correctly handles cases where the returned Flow is immediately completed after receiving a value already set on the- LiveData(for example, when using- take(1)). (I9c566)
- Lifecycle*Effectcompletion is now idempotent (i.e., if the- onStopOrDisposewas called because of the Lifecycle being stopped, it won’t be called a second time upon disposal unless the Lifecycle goes back up to- STARTEDagain). (I5f607, b/352364595)
Version 2.8.3
July 1, 2024
androidx.lifecycle:lifecycle-*:2.8.3 is released. Version 2.8.3 contains these commits.
Bug Fixes
- Fixed an issue with Lifecycle 2.8’s backward compatibility with Compose 1.6.0 and lower when using code shrinking. (aosp/3133056, b/346808608)
Version 2.8.2
June 12, 2024
androidx.lifecycle:lifecycle-*:2.8.2 is released. Version 2.8.2 contains these commits.
Bug Fixes
- Fixed CompositionLocal LocalLifecycleOwner not presenterrors when using Lifecycle 2.8.X with Compose 1.6.X or earlier - you can now use Lifecycle 2.8.2 with any version of Compose without any workarounds required. (aosp/3105647, b/336842920)
- ViewModelProviderwill no longer crash when mixing previous versions of- compileOnlyLifecycle dependencies with versions 2.8+, fixing issues with libraries such as LeakCanary. (I80383, b/341792251)
Version 2.8.1
May 29, 2024
androidx.lifecycle:lifecycle-*:2.8.1 is released. Version 2.8.1 contains these commits.
Bug Fixes
- lifecycle-viewmodel-composenow only has a common dependency on- compose-runtime, removing its common dependency on- compose-ui. The Android artifact retains its- compose-uifor compatibility. (aosp/3079334, b/339562627)
- ViewModel’s- saveableintegration using property delegates now uses the class name as part of the auto-generated key, avoiding conflicts if multiple classes use the same- SavedStateHandle. (aosp/3063463)
Version 2.8.0
May 14, 2024
androidx.lifecycle:lifecycle-*:2.8.0 is released. Version 2.8.0 contains these commits.
Important changes since 2.7.0
- LocalLifecycleOwnerhas been moved from Compose UI to- lifecycle-runtime-composeso that its Compose-based helper APIs can be used outside of Compose UI.
- The lifecycle-runtime-composeartifact now contains thedropUnlessResumedanddropUnlessStartedAPIs which allow you to drop click or other events that occur even after theLifecycleOwnerhas dropped below the givenLifecycle.State. For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
- ViewModel.viewModelScopeis now an overridable constructor parameter, allowing you to inject your own dispatcher and- SupervisorJob()or to override the default by using the- backgroundScopeavailable within- runTest. (I2817c, b/264598574)- class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
- ViewModelhas been rewritten in Kotlin and now uses- AutoClosableinstead of- Closeable. It now supports adding- AutoCloseableobjects with a- keythat allows retrieving them via- getCloseable().
- Calling - LifecycleStartEffectand- LifecycleResumeEffectwithout a key is now an error, following the same convention as the- DisposableEffectAPI that these APIs mirror.
- Deprecated - LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)in favor of- LiveData.toPublisher(lifecycleOwner).
- The - lifecycle-livedata-core-ktxkotlin extensions have now been moved to the- lifecycle-livedata-coremodule.
- The - NullSafeMutableLiveDatahas been refactored to avoid many false positives.
Lifecycle Kotlin Multiplatform Compatibility
The core Lifecycle APIs in Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event, and LifecycleRegistry are now shipped in artifacts compatible with Kotlin Multiplatform.
Artifacts impacted:
- lifecycle-commonmoves most APIs to- commonand supports jvm and iOS in addition to Android.
- lifecycle-runtimemoves most APIs to- commonand supports jvm and iOS in addition to Android.
- lifecycle-runtime-ktxis now empty, with all APIs being moved into- lifecycle-runtime.
- lifecycle-runtime-composemoves all APIs to- commonand ships an Android artifact, matching the multiplatform support of- androidx.compose.
ViewModel Kotlin Multiplatform Compatibility
The lifecycle-viewmodel artifact and APIs like ViewModel, ViewModelStore, ViewModelStoreOwner, and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform.
To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T>.
Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:
- Constructing a ViewModelProviderinstance is now done through theViewModelProvider.create()methods rather than directly calling its constructor.
- ViewModelProvider.NewInstanceFactoryand- ViewModelProvider.AndroidViewModelFactoryare only available on Android.- Custom Factories are recommended to extend from ViewModelProvider.Factoryand use thecreatemethod that takes aCreationExtrasor use theviewModelFactoryKotlin DSL.
 
- Custom Factories are recommended to extend from 
- Using ViewModelProviderwithout a custom factory on non-JVM platforms will result in anUnsupportedOperationException. On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
- viewModelScopewill fallback to an- EmptyCoroutineContextin platforms where- Dispatchers.Mainis not available (e.g., Linux).
Artifacts impacted:
- lifecycle-viewmodelmoves most APIs to- commonand supports jvm and iOS in addition to Android.
- lifecycle-viewmodel-ktxis now empty, with all APIs being moved into- lifecycle-viewmodel.
- lifecycle-viewmodel-composemoves all APIs to- commonand ships an Android artifact, matching the multiplatform support of- androidx.compose.
Behavior Changes
- InitializerViewModelFactory(including- viewModelFactorybuilder function) will now throw an- IllegalArgumentExceptionif a- initializerwith the same- clazz: KClass<VM : ViewModel>has already been added. (Ic3a36)
Known Issues
- lifecycle-*:2.8.0requires a minimum Compose version of 1.7.0-alpha05 (b/336842920).
Version 2.8.0-rc01
May 1, 2024
androidx.lifecycle:lifecycle-*:2.8.0-rc01 is released. Version 2.8.0-rc01 contains these commits.
Bug Fixes
- Fixed an issue where the Baseline Profile for lifecycle-commonclasses was not properly packaged. These are now packaged in thelifecycle-runtimeAAR. (aosp/3038274, b/322382422)
- Fixed an unintentional ordering change in how AutoCloseableinstances attached to a ViewModel are cleared - the previous order ofaddCloseable(String, AutoCloseable), thenaddClosable(AutoCloseable), thenonCleared()has been restored. (aosp/3041632)
- Improve the default creation behavior for viewModelScopefor native and JVM Desktop environments. (aosp/3039221)
External Contribution
- Thanks Victor Kropp for improving the checking for the main thread on JVM Desktop. (aosp/3037116)
Version 2.8.0-beta01
April 17, 2024
androidx.lifecycle:lifecycle-*:2.8.0-beta01 is released. Version 2.8.0-beta01 contains these commits.
New Features
- The lifecycle-runtime-composeartifact is now compatible with Kotlin Multiplatform, moving its code tocommonand ships an Android artifact, matching the multiplatform support forandroidx.compose. (If7a71, I4f4a0, b/331769623)
Version 2.8.0-alpha04
April 3, 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha04 is released. Version 2.8.0-alpha04 contains these commits.
New Features
- The lifecycle-viewmodel-composeartifact is now compatible with Kotlin Multiplatform, moving its code tocommonand ships an Android artifact, matching the multiplatform support ofandroidx.compose. The accommodate this change, the ComposableviewModelmethod now accepts aKClassin addition to ajava.lang.Class. (b/330323282)
Bug Fixes
- The NullSafeMutableLiveDatahas been refactored to avoid many false positives. (I2d8c1, Iafb18, I03463, I7ecef)
Dependency update
- The lifecycle-viewmodel-composeartifact now depends on Compose 1.6.0.
- Lifecycle now depends on Profile Installer 1.3.1.
Version 2.8.0-alpha03
March 20, 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha03 is released. Version 2.8.0-alpha03 contains these commits.
New Features
- ViewModel.viewModelScopeis now an overridable constructor parameter, allowing you to inject your own dispatcher and- SupervisorJob()or to override the default by using the- backgroundScopeavailable within- runTest. (I2817c, b/264598574)- class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Kotlin Multiplatform Compatibility
The lifecycle-viewmodel artifact and APIs like ViewModel, ViewModelStore, ViewModelStoreOwner, and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform. (b/214568825)
To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T>.
Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:
- Constructing a ViewModelProviderinstance is now done through theViewModelProvider.create()methods rather than directly calling its constructor.
- ViewModelProvider.NewInstanceFactoryand- ViewModelProvider.AndroidViewModelFactoryare only available on Android.- Custom Factories are recommended to extend from ViewModelProvider.Factoryand use thecreatemethod that takes aCreationExtrasor use theviewModelFactoryKotlin DSL.
 
- Custom Factories are recommended to extend from 
- Using ViewModelProviderwithout a custom factory on non-JVM platforms will result in anUnsupportedOperationException. On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
- viewModelScopewill fallback to an- EmptyCoroutineContextin platforms where- Dispatchers.Mainis not available (e.g., Linux).
Behavior Changes
- InitializerViewModelFactory(including- viewModelFactorybuilder function) will now throw an- IllegalArgumentExceptionif a- initializerwith the same- clazz: KClass<VM : ViewModel>has already been added. (Ic3a36)
Bug Fixes
- ViewModel.getCloseablenow handles duplicated keys: if the- keyalready has an- AutoCloseableresource associated with it, the old resource will be replaced and closed immediately. (Ibeb67)
- Accessing the viewModelScopeof aViewModelis now thread safe. (If4766, b/322407038)
External Contribution
- LocalLifecycleOwnermoved from Compose UI to lifecycle-runtime-compose so that its Compose-based helper APIs can be used outside of Compose UI. Thanks Jake Wharton for the contribution. (I6c41b, b/328263448)
Version 2.8.0-alpha02
February 21, 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha02 is released. Version 2.8.0-alpha02 contains these commits.
New Features
- The dropUnlessResumedanddropUnlessStartedAPIs have been added which allow you to drop click or other events that occur even after theLifecycleOwnerhas dropped below the givenLifecycle.State. For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }(Icba83, b/317230685)
Kotlin Conversions
- ViewModelis now written in Kotlin (I16f26, b/214568825)
- The lifecycle-viewmodel-ktxkotlin extensions have now been moved to the base lifecycle module. (Id787b, b/274800183)
- The lifecycle-runtime-ktxkotlin extensions have now been moved to the base lifecycle module. (Ic3686, b/274800183)
- The lifecycle-livedata-core-ktxkotlin extensions have now been moved to the base lifecycle module. (I54a3d, b/274800183)
Kotlin Multiplatform Compatibility
- The core Lifecycle APIs in Lifecycle,LifecycleOwner,LifecycleObserver,Lifecycle.State,Lifecycle.Event, andLifecycleRegistryare now shipped in artifacts compatible with Kotlin Multiplatform. (b/317249252)
API Changes
- Calling LifecycleStartEffectandLifecycleResumeEffectwithout a key is now an error, following the same convention as theDisposableEffectAPI that these APIs mirror. (Ib0e0c, b/323518079)
- ViewModelnow uses- AutoCloseableinstead of- Closeable. That is a backward compatible change. (I27f8e, b/214568825)
- Deprecated LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)in favor ofLiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)
External Contribution
- Thanks Ivan Matkov from Jetbrains for helping move Lifecycle to Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)
Version 2.8.0-alpha01
January 24, 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha01 is released. Version 2.8.0-alpha01 contains these commits.
New Features
- ViewModelnow supports adding- Closeableobjects with a- keythat allows retrieving them via- getCloseable(). (I3cf63)
Version 2.7
Version 2.7.0
January 10, 2024
androidx.lifecycle:lifecycle-*:2.7.0 is released. Version 2.7.0 contains these commits.
Important changes since 2.6.0
- TestLifecycleOwnernow includes a suspending function- setCurrentState()which ensures that the state change and all- LifecycleObservercallbacks are completed before returning. Notably, unlike setting the- currentStateproperty directly, this does not use- runBlocking, making it safe to use within a coroutine such as one provided by- runTest.
- The LiveDataextensions ofmapandswitchMapnow mirror the behavior ofdistinctUntilChanged- if theLiveDatahas avalueset, themap/switchMapfunction will be immediately called to populate thevalueof the returnedLiveData. This ensures that the initial value will be set as part of the first composition (when used withobserveAsState()), but does not change the observation behavior - updates values from the sourceLiveDatawill still only apply once you start observing theLiveData.
- This release fixes an issue where SavedStateHandlewould not properly restore customParcelableclasses after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation onget,getLiveData, andgetStateFlownow specifically calls this limitation out.
- The proguard keep rules associated with LifecycleObserverhave been removed. This means that proguarded code that wishes to use APIs via reflection (such as using the long since deprecated@OnLifecycleEventannotation) will need to provide their own keep rules for their specific use case.
Lifecycle Event Observability
- As an alternative to using a LifecycleEventObserver, you can now observe aFlowofLifecycle.Eventvia theLifecycle.asFlow()extension method.
- Jetpack Compose users can now use LifecycleEventEffectto run Compose side effects based onLifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
- Jetpack Compose users can use LifecycleStartEffectandLifecycleResumeEffectto handle pairs of events - started to stopped and resumed to paused, respectively. This API mirrors the one found inDisposableEffectand is suitable for cases where the change being made when the state is going up needs to be reversed when going back down.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}
See Run code on lifecycle events for more information.
Lifecycle State Observability
- The current Lifecycle.Statecan now be observed via theLifecycle.currentStateFlowproperty, which returns aStateFlowwhere thevalueis the currentLifecycle.State.
- Jetpack Compose users can use the Lifecycle.currentStateAsState()extension to directly exposeLifecycle.Stateas ComposeState. This is equivalent (and a shorter alternative) tolifecycle.currentStateFlow.collectAsState().
See Collect lifecycle state with flows for more information.
Version 2.7.0-rc02
December 13, 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc02 is released. Version 2.7.0-rc02 contains these commits.
Bug Fixes
- Fixed an issue where SavedStateHandlewould not properly restore customParcelableclasses after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation onget,getLiveData, andgetStateFlownow specifically calls this limitation out. (I0b55a)
Version 2.7.0-rc01
November 15, 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc01 is released. Version 2.7.0-rc01 contains these commits.
Bug Fixes
- LifecycleStartEffectand- LifecycleResumeEffectnow correctly dispose and recreate the effect block if the- LifecycleOwneris changed. (Ia25c6)
Version 2.7.0-beta01
November 1, 2023
androidx.lifecycle:lifecycle-*:2.7.0-beta01 is released with no changes. Version 2.7.0-beta01 contains these commits.
- A beta version bump, no major changes to this release version.
Version 2.7.0-alpha03
October 18, 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha03 is released. Version 2.7.0-alpha03 contains these commits.
New Features
- lifecycle-runtime-testingnow contains a new Lint check to avoid setting the- Lifecycle.Stateof the- TestLifecycleOwnerby using the- currentStatefield when inside of a coroutine. The Lint check now suggests the suspending- setCurrentStatewhich allows setting the- Lifecycle.Statewithout blocking. (Icf728, b/297880630)
Bug Fixes
- Fixed an issue with LiveData.switchMapwhere returning the sameLiveDatainstance both on the initial call and a subsequent call would prevent theLiveDatainstance from being added as a source. (Ibedcba7)
Version 2.7.0-alpha02
September 6, 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha02 is released. Version 2.7.0-alpha02 contains these commits.
New Features
- TestLifecycleOwnernow includes the suspending function- setCurrentState()to give users the option of using- TestLifecycleOwnerfrom within a coroutine such as one provided by- runTest. (I329de, b/259344129)
API Changes
- All files from the lifecycle-livedata-ktxmodules have been moved into the mainlifecycle-livedatamodule. (I10c6f, b/274800183)
Behavior Changes
- The LiveData.map()andLiveData.switchMap()extensions now sets thevalueof the returnedLiveDataif the previousLiveDatahas had a value set on it, ensuring that using the resulting LiveData in Jetpack Compose has the right state on the initial composition. (I91d2b, b/269479952)
- ViewModel's- addCloseable()now immediately closes the- Closeableif the- ViewModelhas already received a call to- onCleared(). (I4712e, b/280294730)
Bug Fixes
- From Lifecycle 2.6.2: Fixed an issue whereSavedStateHandlewould not correctly be restored after process death if the state was restored,save()was called without actually saving the state in the parentSavedStateRegistry, and then the state was restored again. This fixes the interaction betweenrememberSaveableand Navigation Compose’sNavHost. (aosp/2729289)
Version 2.7.0-alpha01
July 26, 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha01 is released. Version 2.7.0-alpha01 contains these commits.
API Changes
- Lifecycle.Stateis now Compose-observable via- Lifecycle.currentStateFlow, which returns a- StateFlowwhere the- valueis the current- Lifecycle.State. (Ib212d, b/209684871)
- Lifecycle.Events can now able to be observed as a- Flowwith- Lifecycle.asFlow().(If2c0f, b/176311030)
- LifecycleResumeEffectAPI has been added to run Compose- SideEffects based on both- Lifecycle.Event.ON_RESUMEand- Lifecycle.Event.ON_PAUSEevent callbacks. (I60386, b/235529345)
- LifecycleStartEffectAPI has been added to run Compose- SideEffects based on- Lifecycle.Event.ON_STARTand- Lifecycle.Event.ON_STOPevent callbacks. (I5a8d1, b/235529345)
- LifecycleEventEffectAPI has been added to run Compose- SideEffects based on- Lifecycle.Event. (Ic9794, b/235529345)
- Lifecycle.collectAsState()extension has been added to directly expose- Lifecycle.Stateas Compose- State. This is equivalent (and a shorter alternative) to- lifecycle.currentStateFlow.collectAsState(). (I11015, b/235529345)
Bug Fixes
- The LiveData.distinctUntilChanged()extension now sets thevalueof the returnedLiveDataif the previousLiveDatahas had a value set on it. This does not change the observation behavior - updated values from the sourceLiveDatawill still only apply once you start observing theLiveDatareturned fromdistinctUntilChanged(). (Ib482f)
- The proguard keep rules associated with LifecycleObserverhave been removed. This means that proguarded code that wishes to use APIs via reflection will need to provide their own keep rules for their specific use case. (Ia12fd)
Version 2.6
Version 2.6.2
September 6, 2023
androidx.lifecycle:lifecycle-*:2.6.2 is released. Version 2.6.2 contains these commits.
Bug Fixes
- Fixed an issue where SavedStateHandlewould not correctly be restored after process death if the state was restored,save()was called without actually saving the state in the parentSavedStateRegistry, and then the state was restored again. This fixes the interaction betweenrememberSaveableand Navigation Compose’sNavHost. (aosp/2729289)
Version 2.6.1
March 22, 2023
androidx.lifecycle:lifecycle-*:2.6.1 is released. Version 2.6.1 contains these commits.
Dependency Updates
- lifecycle-viewmodel-savedstatenow depends on SavedState- 1.2.1. (cd7251)
- Lifecycle now depends on ProfileInstaller 1.3.0. (f9d30b)
Version 2.6.0
March 8, 2023
androidx.lifecycle:lifecycle-*:2.6.0 is released. Version 2.6.0 contains these commits.
Important changes since 2.5.0
- LiveDatanow includes a new- isInitializedproperty that indicates whether an explicit value has ever been set on the- LiveData, allowing you to distinguish between- liveData.valuereturning- nullbecause no value has ever been set or an explicit- nullvalue.
- MediatorLiveDatanow includes a constructor to set an initial value.
- Added a new extension on StateFlowandFlowofcollectAsStateWithLifecycle()that collect from flows and represents its latest value as Compose State in a lifecycle-aware manner.
- Lifecycle.launchWhenXmethods and- Lifecycle.whenXmethods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use- Lifecycle.repeatOnLifecycle. For more information about one-time suspending work, please see this explanation on why this is inherently unsafe.
- Kotlin Conversion - A large number of Lifecycle classes have been converted to Kotlin. All converted classes still retain their binary compatibility with previous versions. The following classes have source incompatible changes for classes written in Kotlin: ViewTreeLifecycleOwner,LiveDataReactiveStreams,HasDefaultViewModelProviderFactory,ViewTreeViewModelStoreOwner,Transformations,ViewModelStoreOwner,LifecycleOwner
The table below provides the source conversions for the new version of lifecycle.
| Lifecycle 2.5 | Lifecycle 2.5 (KTX) | Lifecycle 2.6 | 
|---|---|---|
| Transformations.switchMap(liveData) {...} | liveData.switchMap {...} | liveData.switchMap {...} | 
| Transformations.map(liveData) {...} | liveData.map {...} | liveData.map {...} | 
| Transformations.distinctUntilChanged(liveData) {...} | liveData.distinctUntilChanged{...} | liveData.distinctUntilChanged{...} | 
| LiveDataReactiveStreams.fromPublisher(publisher) | publisher.toLiveData() | publisher.toLiveData() | 
| LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) | liveData.toPublisher(lifecycleOwner) | liveData.toPublisher(lifecycleOwner) | 
| override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory | override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory | override val defaultViewModelProviderFactory = factory | 
| override fun getDefaultViewModelCreationExtras(): CreationExtras = extras | override fun getDefaultViewModelCreationExtras(): CreationExtras = extras | override val defaultViewModelProviderCreationExtras = extras | 
| ViewTreeLifecycleOwner.set(view, owner) | ViewTreeLifecycleOwner.set(view, owner) | view.setViewTreeLifecycleOwner(owner) | 
| ViewTreeLifecycleOwner.get(view) | view.findViewTreeLifecycleOwner() | view.findViewTreeLifecycleOwner() | 
| override fun getViewModelStore(): ViewModelStore = store | override fun getViewModelStore(): ViewModelStore = store | override val viewModelStore: ViewModelStore = store | 
| override fun getLifecycle(): Lifecycle = registry | override fun getLifecycle(): Lifecycle = registry | override val lifecycle: Lifecycle get() = registry | 
- The nullability of the onChangedmethod of aObservercreated in Kotlin now matches the nullability of the generic type. If you wantObserver.onChanged()to accept a nullable type, you must instantiate theObserverwith a nullable type.
- These classes were also converted to Kotlin, but remain source compatible: DefaultLifecycleObserver,LifecycleEventObserver,Lifecycle,LifecycleRegistry,LifecycleObserver,ViewModelStore,AndroidViewModel,AbstractSavedStateViewModelFactory,LifecycleService,ServiceLifecycleDispatcher, andProcessLifecycleOwner
Version 2.6.0-rc01
February 22, 2023
androidx.lifecycle:lifecycle-*:2.6.0-rc01 is released. Version 2.6.0-rc01 contains these commits.
Bug Fixes
- The LiveData.distinctUntilChanged()extension now sets thevalueof the returnedLiveDataif the previousLiveDatahas had a value set on it. This does not change the observation behavior - updated values from the sourceLiveDatawill still only apply once you start observing theLiveDatareturned fromdistinctUntilChanged(). (Ib482f)
Version 2.6.0-beta01
February 8, 2023
androidx.lifecycle:lifecycle-*:2.6.0-beta01 is released. Version 2.6.0-beta01 contains these commits.
Kotlin Conversions
- LifecycleOwneris now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the- lifecycleproperty rather than implementing the previous- getLifecycle()function. (I75b4b, b/240298691)
- ViewModelStoreOwneris now in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the- viewModelStoreproperty rather than implementing the previous- getViewModelStore()function. (I86409, b/240298691)
- The Kotlin extension on LifecycleOwnerthat provides thelifecycleScopefield has been moved to thelifecycle-commonartifact fromlifecycle-runtime-ktx. (I41d78, b/240298691)
- The Kotlin extension on Lifecyclethat provides thecoroutineScopefield has been moved to thelifecycle-commonartifact fromlifecycle-runtime-ktx. (Iabb91, b/240298691)
Version 2.6.0-alpha05
January 25, 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha05 is released. Version 2.6.0-alpha05 contains these commits.
Kotlin Conversions
- Transformationsis now written in Kotlin. This is a source incompatible change for those classes written in Kotlin that were directly using syntax such as- Transformations.map- Kotlin code must now use the Kotlin extension method syntax that was previously only available when using- lifecycle-livedata-ktx. When using the Java programming language, the versions of these methods that take an- androidx.arch.core.util.Functionmethod are deprecated and replaced with the versions that take a Kotlin- Function1. This change maintains binary compatibility. (I8e14f)
- ViewTreeViewModelStoreOwneris now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on- Viewof- androidx.lifecycle.setViewTreeViewModelStoreOwnerand- androidx.lifecycle.findViewTreeViewModelStoreOwnerto set and find a previously set owner. This is binary compatible and remains source compatible for implementations written in the Java programming language. (Ia06d8, Ib22d8, b/240298691)
- The HasDefaultViewModelProviderFactoryinterface is now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override thedefaultViewModelProviderFactoryanddefaultViewModelCreationExtrasproperties rather than implementing the previous corresponding functions. (Iaed9c, b/240298691)
- Observeris now written in Kotlin. Its- onChanged()method now uses the name- valuefor its parameter. (Iffef2, I4995e, b/240298691)
- AndroidViewModel,- AbstractSavedStateViewModelFactory,- LifecycleService,- ServiceLifecycleDispatcher, and- ProcessLifecycleOwnerare now written in Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)
Version 2.6.0-alpha04
January 11, 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha04 is released. Version 2.6.0-alpha04 contains these commits.
New Features
- LiveDatanow includes a new- isInitializedproperty that indicates whether an explicit value has ever been set on the- LiveData, allowing you to distinguish between- liveData.valuereturning- nullbecause no value has ever been set or an explicit- nullvalue. (Ibd018)
API Changes
- The collectAsStateWithLifecycle()APIs oflifecycle-runtime-composeare no longer in experimental status. (I09d42, b/258835424)
- Lifecycle.launchWhenXmethods and- Lifecycle.whenXmethods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use- Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)
Kotlin Conversions
- ViewTreeLifecycleOwneris now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on- Viewof- androidx.lifecycle.setViewTreeLifecycleOwnerand- androidx.lifecycle.findViewTreeLifecycleOwnerto set and find a previously set owner. This replaces the previous Kotlin extension in- lifecycle-runtime-ktx. This is binary compatible and remains source compatible for implementations written in the Java programming language. (I8a77a, I5234e, b/240298691)
- LiveDataReactiveStreamsis now written in Kotlin. The Kotlin extensions previously in- lifecycle-reactivestreams-ktxhave been moved into the- lifecycle-reactivestreamsmodule and have become the primary surface for code written in Kotlin. This is a source incompatible change for code written in Kotlin if you were not already using the Kotlin extension method APIs. (I2b1b9, I95d22, b/240298691)
- DefaultLifecycleObserver,- LifecycleEventObserver,- Lifecycle,- LifecycleRegistry,- LifecycleObserver, and- ViewModelStoreare now written in Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)
Bug Fixes
- SavedStateHandleno longer crashes with a- ClassCastExceptionwhen calling- get()with the incorrect class type. (I6ae7c)
Version 2.6.0-alpha03
October 24, 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha03 is released. Version 2.6.0-alpha03 contains these commits.
Bug Fixes
- Fixed an issue with constraints between different Lifecycle modules not working as intended. (I18d0d, b/249686765)
- Errors thrown by LifecycleRegistry.moveToState()now include a more helpful error messaging that informs developers of the component causing the error. (Idf4b2, b/244910446)
Version 2.6.0-alpha02
September 7, 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha02 is released. Version 2.6.0-alpha02 contains these commits.
API Changes
- MediatorLiveDatanow includes a constructor to set an initial value. (Ib6cc5, b/151244085)
Bug Fixes
- Lifecycleartifacts now include constraints that ensure that all inter-dependent Lifecycle artifacts use the same version, automatically upgrading other dependencies when one is upgraded. b/242871265
- FlowLiveData.asFlow()now creates a- callbackFlowrather than using its own- Channelimplementation to ensure thread-safety and context preservation. (I4a8b2, b/200596935)
- FlowLiveData's- asLiveDatafunction will now preserve the initial value of a- StateFlowwhen creating the new- LiveDataobject. (I3f530, b/157380488)
- From Lifecycle 2.5.1: Custom implementations ofAndroidViewModelFactorynow correctly calls thecreate(modelClass)function when using the stateful constructor withLifecycle2.4+ (I5b315, b/238011621)
Version 2.6.0-alpha01
June 29, 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha01 is released. Version 2.6.0-alpha01 contains these commits.
New Features
- Added a new extension on StateFlowandFlowofcollectAsStateWithLifecyclethat collect from flows and represents its latest value as Compose State in a lifecycle-aware manner. The flow is collected and the new emission is set to the State's value when the lifecycle is at least in a certainLifecycle.State. When the lifecycle falls below thatLifecycle.State, the flow collection stops and the State's value is not updated. (I1856e, b/230557927)
Version 2.5
Version 2.5.1
July 27, 2022
androidx.lifecycle:lifecycle-*:2.5.1 is released. Version 2.5.1 contains these commits.
Bug Fixes
- Custom implementations of AndroidViewModelFactorynow correctly call thecreate(modelClass)function when using the statefulAndroidViewModelFactoryconstructor withLifecycle2.4+. (I5b315, b/238011621)
Version 2.5.0
June 29, 2022
androidx.lifecycle:lifecycle-*:2.5.0 is released. Version 2.5.0 contains these commits.
Important changes since 2.4.0
- SavedStateHandlenow offers a- getStateFlow()API that returns a Kotlin- StateFlowfor monitoring value changes as an alternative to using- LiveData.
- ViewModel CreationExtras - when writing a custom - ViewModelProvider.Factory, it is no longer required to extend- AndroidViewModelFactoryor- AbstractSavedStateViewModelFactoryto gain access to an- Applicationor- SavedStateHandle, respectively. Instead, these fields are provided to every- ViewModelProvider.Factorysubclass as- CreationExtrasvia the new overload of- create:- create(Class<T>, CreationExtras). These extras are provided automatically by your Activity or Fragment when using Activity- 1.5.0and Fragment- 1.5.0, respectively.- class CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { return when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) // Pass it directly to HomeViewModel HomeViewModel(application) } DetailViewModel::class -> { // Create a SavedStateHandle for this ViewModel from extras val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> throw IllegalArgumentException("Unknown class $modelClass") } as T } }
- lifecycle-viewmodelnow provides a- viewModelFactoryKotlin DSL that allows you define your- ViewModelProvider.Factoryin terms of one or more lambda initializers, one for each particular- ViewModelclass your custom factory supports, using- CreationExtrasas the primary data source.- val customFactory = viewModelFactory { // The return type of the lambda automatically sets what class this lambda handles initializer { // Get the Application object from extras provided to the lambda val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }
- lifecycle-viewmodel-composenow offers a- viewModel()API that takes a lambda factory for creating a- ViewModelinstance without requiring the creation of a custom- ViewModelProvider.Factory.- // Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
- SavedStateHandle Compose Saver Integration - the - lifecycle-viewmodel-composeartifact now contains new experimental APIs in- SavedStateHandle.saveablethat allow- rememberSaveablelike behavior backed by the- SavedStateHandleof a `ViewModel.- class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
- Added an - addCloseable()API and a new constructor overload that allow you to add one or more- Closeableobjects to the- ViewModelthat will be closed when the- ViewModelis cleared without requiring any manual work in- onCleared().- For instance, to create a coroutine scope that you can inject into a ViewModel, but control via testing, you can create a - CoroutineScopethat implements- Closeable:- class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }- Which can then be used in your - ViewModelconstructor while maintaining the same lifetime as- viewModelScope:- class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Behavior changes
- Attempting to move the Lifecycle.StatefromINITIALIZEDtoDESTROYEDwill now always throw anIllegalStateExceptionregardless of whether theLifecyclehas an attached observer.
- LifecycleRegistrywill now clear their observers when they reach the- DESTROYEDstate.
Version 2.5.0-rc02
June 15, 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc02 is released. Version 2.5.0-rc02 contains these commits.
Bug Fixes
- ViewModelProviderwill no longer crash when mixing previous versions of compileOnly Lifecycle dependencies with versions 2.5+. (I81a66, b/230454566)
Version 2.5.0-rc01
May 11, 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc01 is released. Version 2.5.0-rc01 contains these commits.
Bug Fixes
- MediatorLiveData.addSource()now throws a- NullPointerExceptionwhen passed a- nullsource instead of propagating the- nullsource to observers.(Ibd0fb, b/123085232)
Version 2.5.0-beta01
April 20, 2022
androidx.lifecycle:lifecycle-*:2.5.0-beta01 is released. Version 2.5.0-beta01 contains these commits.
API Changes
- Added SavedStateHandle.saveableproperty delegates to use property names as keys for persisting state into theSavedStateHandle(I8bb86, b/225014345)
Bug Fixes
- Fixed an issue where nesting one NavHostwithin anotherNavHostin a non-primary bottom navigation tab would lead to anIllegalStateExceptionwhen using multiple back stacks. (I11bd5, b/228865698)
Version 2.5.0-alpha06
April 6, 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha06 is released. Version 2.5.0-alpha06 contains these commits.
New Features
- Add experimental MutableStateoverload toSavedStateHandle.saveablefor parity withrememberSaveable(I38cfe, b/224565154)
API Changes
- CreationExtrasis now abstract instead of sealed. (Ib8a7a)
Bug Fixes
- Fixed an IllegalStateException: Already attached to lifecycleOwnererror caused bySavedStateHandleController. (I7ea47, b/215406268)
Version 2.5.0-alpha05
March 23, 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha05 is released. Version 2.5.0-alpha05 contains these commits.
New Features
- The lifecycle-viewmodel-composemodule now providesSavedStateHandleSaver, an experimental API that ensures values in aSavedStateHandleare integrated correctly with the same saved instance state thatrememberSaveableuses. (Ia88b7, b/195689777)
API Changes
- Fixed a compatibility issue with Lifecycle 2.3 and newer Lifecycle versions in Java. (I52c8a, b/219545060)
Bug Fixes
- SavedStateViewFactorynow supports using- CreationExtraseven when it was initialized with a- SavedStateRegistryOwner. If extras are provided, the initialized arguments are ignored. (I6c43b, b/224844583)
Version 2.5.0-alpha04
March 9, 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha04 is released. Version 2.5.0-alpha04 contains these commits.
API Changes
- SavedStateHandlenow offers a- getStateFlow()API that returns a Kotlin- StateFlowfor monitoring value changes as an alternative to using- LiveData. (Iad3ab, b/178037961)
Version 2.5.0-alpha03
February 23, 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha03 is released. Version 2.5.0-alpha03 contains these commits.
New Features
- Added an addCloseable()API and a new constructor overload that allow you to add one or moreCloseableobjects to theViewModelthat will be closed when theViewModelis cleared without requiring any manual work inonCleared(). (I55ea0)
- lifecycle-viewmodelnow provides an- InitializerViewModelFactorythat allows you to add lambda for handling particular- ViewModelclasses, using- CreationExtrasas the primary data source. (If58fc, b/216687549)
- lifecycle-viewmodel-composenow offers a- viewModel()API that takes a lambda factory for creating a- ViewModelinstance without requiring the creation of a custom- ViewModelProvider.Factory. (I97fbb, b/216688927)
API Changes
- You can now create a ViewModelwithCreationExtrasvialifecycle-viewmodel-compose. (I08887, b/216688927)
Behavior changes
- Attempting to move the Lifecycle.StatefromINITIALIZEDtoDESTROYEDwill now always throw anIllegalStateExceptionregardless of whether theLifecyclehas an attached observer. (I7c390, b/177924329)
- LifecycleRegistrywill now clear their observers when they reach the- DESTROYEDstate. (I4f8dd, b/142925860)
Version 2.5.0-alpha02
February 9, 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha02 is released. Version 2.5.0-alpha02 contains these commits.
API Changes
- SavedStateHandleand- SavedStateViewModelFactoryhave been converted to Kotlin. This has improved the nullability of the generics in both classes. (Ib6ce2, b/216168263, I9647a, b/177667711)
- The LiveDataswitchMapfunction parameter can now have a nullable output. (I40396, b/132923666)
- The LiveData-ktx extensions are now annotated with@CheckResultto enforce that the result is used when calling these functions. (Ia0f05, b/207325134)
Behavior changes
- SavedStateHandlenow properly stores the defaultValue when no value for the specified key exists. (I1c6ce, b/178510877)
Bug Fixes
- From Lifecycle 2.4.1: Updatedlifecycle-processto depend on Startup 1.1.1 to ensure that fixes that preventProcessLifecycleInitializerfrom throwing aStartupExceptionare available by default. (Ib01df, b/216490724)
- There is now an improved error message when custom AndroidViewModelclasses have parameters in the wrong order and attempt to create aViewModel. (I340f7, b/177667711)
- You can now create a view model via CreationExtrasusing theAndroidViewModelFactorywithout setting an application. (I6ebef, b/217271656)
Version 2.5.0-alpha01
January 26, 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha01 is released. Version 2.5.0-alpha01 contains these commits.
ViewModel CreationExtras
With this release, we are laying the groundwork for restructuring how a ViewModel is constructed. Instead of a rigid set of subclasses of ViewModelProvider.Factory that each add additional functionality (allowing an Application constructor parameter via AndroidViewModelFactory, allowing a SavedStateHandle constructor parameter via SavedStateViewModelFactory and AbstractSavedStateViewModelFactory, etc.), we are moving to a world of stateless factories that rely on a new concept, CreationExtras. (Ia7343, b/188691010, b/188541057)
With this change, ViewModelProvider no longer makes direct calls into the previous create(Class<T>) method of ViewModelProvider.Factory. Instead, it calls into a new overload of create: create(Class<T>, CreationExtras). This means that any direct implementation of the ViewModelProvider.Factory instance now has access to each of these new CreationExtras:
- ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: this- Stringprovides access to the custom key you passed to- ViewModelProvider.get().
- ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEYprovides access to the- Applicationclass.
- SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEYprovides access to the- SavedStateRegistryOwnerthat is being used to construct this ViewModel.
- SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEYprovides access to the- ViewModelStoreOwnerthat is being used to construct this ViewModel.
- SavedStateHandleSupport.DEFAULT_ARGS_KEYprovides access to the- Bundleof arguments that should be used to construct a- SavedStateHandle.
These extras are provided by default when using Activity 1.5.0-alpha01, Fragment 1.5.0-alpha01, and Navigation 2.5.0-alpha01. If you use an earlier version of those libraries, your CreationExtras will be empty - all of the existing subclasses of ViewModelProvider.Factory have been rewritten to support both the legacy creation path used by earlier versions of those libraries and the CreationExtras path which will be used going forward.
These CreationExtras allow you to construct a ViewModelProvider.Factory that passes just the information you need to each ViewModel without relying on a strict hierarchy of Factory subclasses:
class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}
We use the createSavedStateHandle() Kotlin extension function on CreationExtras from SavedStateHandleSupport to construct a SavedStateHandle only for the one ViewModel that needs it. (Ia6654, b/188541057)
Custom CreationExtras can be provided by overriding getDefaultViewModelCreationExtras() in your ComponentActivity or Fragment, thus making them available to your custom ViewModelProvider.Factory as a built in form of assisted injection. These extras will automatically be made available to your custom Factory when used directly with ViewModelProvider or when using the by viewModels() and by activityViewModels() Kotlin property extensions. (I79f2b, b/207012584, b/207012585, b/207012490)
Bug Fixes
- Fixed an issue where the default value provided
to a SavedStateHandlewould reappear after process death and recreation, even if it was specifically removed from theSavedStateHandle. As a consequence of this,SavedStateHandlewill no longer merge default values and restored values together, instead only using the restored values as the source of truth. (I53a4b)
Version 2.4
Version 2.4.1
February 9, 2022
androidx.lifecycle:lifecycle-*:2.4.1 is released. Version 2.4.1 contains these commits.
Bug Fixes
- Backported from Lifecycle 2.5.0-alpha01: Fixed an issue where the default value provided to aSavedStateHandlewould re-appear after process death and recreation, even if it was specifically removed from theSavedStateHandle. As a consequence of this,SavedStateHandlewill no longer merge default values and restored values together, instead only using the restored values as the source of truth. (I53a4b)
- lifecycle-processnow depends on Androidx Startup 1.1.1 which fixed a regression in where using- ProcessLifecycleInitializerwould cause an- StartupException. (b/216490724)
Version 2.4.0
October 27, 2021
androidx.lifecycle:lifecycle-*:2.4.0 is released. Version 2.4.0 contains these commits.
Important changes since 2.3.0
- @OnLifecycleEventwas deprecated.- LifecycleEventObserveror- DefaultLifecycleObservershould be used instead.
- androidx.lifecycle:lifecycle-viewmodel-composelibrary was added. It provides- viewModel()composable and- LocalViewModelStoreOwner.- Source-breaking change: ViewModelProviderhas been rewritten in Kotlin.ViewModelProvider.Factory.createmethod no longer allows nullable generic.
 
- Source-breaking change: 
- New coroutines API were added to androidx.lifecycle:lifecycle-runtime-ktx:
- Lifecycle.repeatOnLifecycle, API that executes a block of code in a coroutine when the Lifecycle is at least in a certain state. The block will cancel and re-launch as the lifecycle moves in and out of the target state;
- Flow.flowWithLifecycle, API that emits values from the upstream Flow when the lifecycle is at least in a certain state.
- DefaultLifecycleObserverwas moved from- lifecycle.lifecycle-common-java8to- lifecycle.lifecycle-common.- lifecycle.lifecycle-common-java8doesn't provide anymore any additional functionality on top of- lifecycle.lifecycle-common, so dependency on it can be replaced by- lifecycle.lifecycle-common.
- Non coroutines API from lifecycle-viewmodel-ktxhave been moved to thelifecycle-viewmodelmodule.
- lifecycle-processnow uses- androidx.startupto initialize the- ProcessLifecycleOwner.- Previously, this was being done by - androidx.lifecycle.ProcessLifecycleOwnerInitializer.- If you used - tools:node="remove"the- ContentProviderbeing used to initialize process lifecycle in the past, then you need to do the following instead.- <provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>- (or) - <!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Version 2.4.0-rc01
September 29, 2021
androidx.lifecycle:lifecycle-*:2.4.0-rc01 is released with no changes from Lifecycle 2.4.0-beta01. Version 2.4.0-rc01 contains these commits.
Version 2.4.0-beta01
September 15, 2021
androidx.lifecycle:lifecycle-*:2.4.0-beta01 is released. Version 2.4.0-beta01 contains these commits.
API Changes
- @OnLifecycleEventwas deprecated.- LifecycleEventObserveror- DefaultLifecycleObservershould be used instead. (I5a8fa)
- DefaultLifecycleObserver was moved from androidx.lifecycle.lifecycle-common-java8toandroidx.lifecycle.lifecycle-common.androidx.lifecycle.lifecycle-common-java8doesn't provide anymore any additional functionality on top ofandroidx.lifecycle.lifecycle-common, so dependency on it can be replaced byandroidx.lifecycle.lifecycle-common. (I021aa)
- Non coroutines API from lifecycle-viewmodel-ktxhave been moved to thelifecycle-viewmodelmodule. (I6d5b2)
External Contribution
Version 2.4.0-alpha03
August 4, 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha03 is released. Version 2.4.0-alpha03 contains these commits.
API Changes
- Source-breaking change: ViewModelProvider has been rewritten in Kotlin.
  ViewModelProvider.Factory.createmethod no longer allows nullable generic. (I9b9f6)
Behavior Changes
- The Lifecycle.repeatOnLifecycle:blockis now always invoked serially when repeating execution. (Ibab33)
External Contribution
- Thanks chao2zhang for fixing the code snippets in the repeatOnLifecycledocumentation. #205.
Version 2.4.0-alpha02
June 16, 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha02 is released. Version 2.4.0-alpha02 contains these commits.
New Features
- Added a new RepeatOnLifecycleWrongUsagelint check tolifecycle-runtime-ktxthat detects whenrepeateOnLifecycleis incorrectly used inonStart()oronResume(). (706078, b/187887400)
API Changes
- The LifecycleOwner.addRepeatingJobAPI is removed in favor ofLifecycle.repeatOnLifecyclethat respects structured concurrency and is easier to reason about. (I4a3a8)
- Make ProcessLifecycleInitializerpublic so otherandroidx.startup.Initializers can use these as dependencies. (I94c31)
Bug Fixes
- Fixed an issue with the NullSafeMutableLiveDatalint check when the field has modifiers. (#147, b/183696616)
- Fixed another issue with the NullSafeMutableLiveDatalint check when using generics. (#161, b/184830263)
External Contribution
- Thanks maxsav for improving the NullSafeMutableLiveDatalint check. (#147, b/183696616)
- Thanks kozaxinan for improving the NullSafeMutableLiveDatalint check. (#161, b/184830263)
Version 2.4.0-alpha01
March 24, 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha01 is released. Version 2.4.0-alpha01 contains these commits.
Behavior Changes
- lifecycle-processnow uses- androidx.startupto initialize the- ProcessLifecycleOwner.- Previously, this was being done by - androidx.lifecycle.ProcessLifecycleOwnerInitializer.- If you used - tools:node="remove"the- ContentProviderbeing used to initialize process lifecycle in the past, then you need to do the following instead.- <provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>- (or) - <!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
API Changes
- Added a Flow.flowWithLifecycleAPI that emits values from the upstream Flow when the lifecycle is at least in a certain state using theLifecycle.repeatOnLifecycleAPI. This is an alternative to the also newLifecycleOwner.addRepeatinJobAPI. (I0f4cd)
Bug Fixes
- From Lifecycle 2.3.1: The NonNullableMutableLiveDatalint rule can now properly differentiate between field variables with different nullability. (b/169249668)
Lifecycle Viewmodel Compose Version 1.0.0
Version 1.0.0-alpha07
June 16, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.
Breaking API Changes
- viewModel()now takes an optional- ViewModelStoreOwner, making it easier to work with owners other than the- LocalViewModelStoreOwner. For example, you can now use- viewModel(navBackStackEntry)to retrieve a ViewModel associated with a particular navigation graph. (I2628d, b/188693123)
Version 1.0.0-alpha06
June 2, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 is released. Version 1.0.0-alpha06 contains these commits.
Updated to be compatible with Compose version 1.0.0-beta08.
Version 1.0.0-alpha05
May 18, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 is released. Version 1.0.0-alpha05 contains these commits.
New Features
- Updated to be compatible with Compose version 1.0.0-beta07.
Bug Fixes
- The AndroidManifest files from ui-test-manifest and ui-tooling-data are now compatible with Android 12 (I6f9de, b/184718994)
Version 1.0.0-alpha04
April 7, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 is released. Version 1.0.0-alpha04 contains these commits.
Dependency Changes
- This version allows androidx.hilt:hilt-navigation-composeandandroidx.navigation:navigation-composeto sync dependencies onandroidx.compose.compiler:compiler:1.0.0-beta04andandroidx.compose.runtime:runtime:1.0.0-beta04. For 1.0.0, it is required that the compiler and runtime match.
Version 1.0.0-alpha03
March 10, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 is released. Version 1.0.0-alpha03 contains these commits.
API Changes
- LocalViewModelStoreOwner.currentnow returns a nullable- ViewModelStoreOwnerto better determine whether a- ViewModelStoreOwneris available in the current composition. APIs that require a- ViewModelStoreOwner, such as- viewModel()and- NavHost, still throw an exception if a- ViewModelStoreOwneris not set. (Idf39a)
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha02
February 24, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 is released. Version 1.0.0-alpha02 contains these commits.
API Changes
- LocalViewModelStoreOwnernow has a- providesfunctions that can be used with- CompositionLocalProvider, replacing the- asProvidableCompositionLocal()API. (I45d24)
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01
February 10, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 is released. Version 1.0.0-alpha01 contains these commits.
New Features
- The viewModel()composable andLocalViewModelStoreOwnerwere moved fromandroidx.compose.ui.viewinteropto this artifact in theandroidx.lifecycle.viewmodel.composepackage. (I7a374)
Version 2.3.1
Lifecycle Version 2.3.1
March 24, 2021
androidx.lifecycle:lifecycle-*:2.3.1 is released. Version 2.3.1 contains these commits.
Bug Fixes
- The NonNullableMutableLiveDatalint rule can now properly differentiate between field variables with different nullability. (b/169249668)
Version 2.3.0
Version 2.3.0
February 10, 2021
androidx.lifecycle:lifecycle-*:2.3.0 is released. Version 2.3.0 contains these commits.
Major changes since 2.2.0
- SavedStateHandlesupport for non-parcelable classes:- SavedStateHandlenow supports lazy serialization by allowing you to call- setSavedStateProvider()for a given key, providing a- SavedStateProviderthat will get a callback to- saveState()when the- SavedStateHandleis asked to save its state. See Saving non-parcelable classes.
- Lifecycle Behavior Enforcement:
- LifecycleRegistry now enforces DESTROYEDas a terminal state.
- LifecycleRegistrynow verifies that its methods are called on main thread. It was always a requirement for lifecycles of activities, fragments etc. An addition of observers from non-main threads resulted in hard to catch crashes in runtime. For- LifecycleRegistryobjects that owned by your own components, you can explicitly opt out from checks by using- LifecycleRegistry.createUnsafe(...), but then you have to ensure that a proper synchronization is in place when this- LifecycleRegistryis accessed from different threads.
 
- LifecycleRegistry now enforces 
- Lifecycle State and Event Helpers: Added static helper methods of downFrom(State),downTo(State),upFrom(State),upTo(State)toLifecycle.Eventfor generating theEventgiven aStateand transition direction. Added thegetTargetState()method that provides theStatethat the Lifecycle will transition to directly following theEvent.
- withStateAtLeast: Added- Lifecycle.withStateAtLeastAPIs that await a lifecycle state and run a non-suspending block of code synchronously at the point of state change, then resume with the result. These APIs differ from the existing- when*methods as they do not permit running suspending code and do not employ a custom dispatcher. (aosp/1326081)
- ViewTreeAPIs: A new- ViewTreeLifecycleOwner.get(View)and- ViewTreeViewModelStoreOwner.get(View)API allows you to retrieve the containing- LifecycleOwnerand- ViewModelStoreOwner, respectively, given a- Viewinstance. You must upgrade to Activity- 1.2.0and Fragment- 1.3.0, and AppCompat 1.3.0-alpha01 or higher to populate this correctly. The- findViewTreeLifecycleOwnerand- findViewTreeViewModelStoreOwnerKotlin extensions are available in- lifecycle-runtime-ktxand- lifecycle-viewmodel-ktx, respectively.
- LiveData.observe()Kotlin extension deprecation: The- LiveData.observe()Kotlin extension necessary to use lambda syntax is now deprecated as it is not necessary when using Kotlin 1.4.
Version 2.3.0-rc01
December 16, 2020
androidx.lifecycle:lifecycle-*:2.3.0-rc01 is released. Version 2.3.0-rc01 contains these commits.
Bug Fixes
- The keys()method ofSavedStateHandleis now consistent before and after the state is saved - it now includes keys previously used withsetSavedStateProvider()in addition to the keys used withset()andgetLiveData(). (aosp/1517919, b/174713653)
External Contribution
- The APIs to suspend Lifecycle-aware coroutines now better handle calls to yield(). Thanks Nicklas Ansman Giertz! (aosp/1430830, b/168777346)
Version 2.3.0-beta01
October 1, 2020
androidx.lifecycle:lifecycle-*:2.3.0-beta01 is released. Version 2.3.0-beta01 contains these commits.
API Changes
- The LiveData.observe()Kotlin extension necessary to use lambda syntax is now deprecated as it is not necessary when using Kotlin 1.4. (I40d3f)
Bug Fixes
- Upgrade androidx to use Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Documentation Changes
- The liveDatabuilder andasLiveData()docs have been updated to include details about changing the given timeout values. (aosp/1122324)
Version 2.3.0-alpha07
August 19, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha07 is released. Version 2.3.0-alpha07 contains these commits.
Bug Fixes
- Fixed a crash issue in the NullSafeMutableLiveDataLint check. (aosp/1395367)
Version 2.3.0-alpha06
July 22, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha06 is released. Version 2.3.0-alpha06 contains these commits.
New Features
- Added static helper methods of downFrom(State),downTo(State),upFrom(State),upTo(State)toLifecycle.Eventfor generating theEventgiven aStateand transition direction. Added thegetTargetState()method that provides theStatethat the Lifecycle will transition to directly following theEvent. (I00887)
- Added Lifecycle.withStateAtLeastAPIs that await a lifecycle state and run a non-suspending block of code synchronously at the point of state change, then resume with the result. These APIs differ from the existingwhen*methods as they do not permit running suspending code and do not employ a custom dispatcher. (aosp/1326081)
Behavior Changes
- LifecycleRegistry now enforces DESTROYEDas a terminal state. (I00887)
- LifecycleRegistrynow verifies that its methods are called on main thread. It was always a requirement for lifecycles of activities, fragments etc. An addition of observers from non-main threads resulted in hard to catch crashes in runtime. For- LifecycleRegistryobjects that owned by your own components, you can explicitly opt out from checks by using- LifecycleRegistry.createUnsafe(...), but then you have to ensure that a proper synchronization is in place when this- LifecycleRegistryis accessed from different threads (Ie7280, b/137392809)
Bug Fixes
- Fixed a crash in NullSafeMutableLiveData. (b/159987480)
- Fixed an ObsoleteLintCustomCheckfor Lint checks bundled withlifecycle-livedata-core-ktx(and specificallyNullSafeMutableLiveData). (b/158699265)
Version 2.3.0-alpha05
June 24, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha05 is released. Version 2.3.0-alpha05 contains these commits.
Bug Fixes
- LiveDatanow better handles reentrant cases, avoiding duplicate calls to- onActive()or- onInactive(). (b/157840298)
- Fixed an issue where Lint checks would not run when using Android Studio 4.1 Canary 6 or higher. (aosp/1331903)
Version 2.3.0-alpha04
June 10, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha04 is released. Version 2.3.0-alpha04 contains these commits.
Bug Fixes
- Fixed a crash in the NonNullableMutableLiveDataLint check. (b/157294666)
- The NonNullableMutableLiveDataLint check now covers significantly more cases where anullvalue was set on aMutableLiveDatawith a non-null type parameter. (b/156002218)
Version 2.3.0-alpha03
May 20, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha03 are released. Version 2.3.0-alpha03 contains these commits.
New Features
- SavedStateHandlenow supports lazy serialization by allowing you to call- setSavedStateProvider()for a given key, providing a- SavedStateProviderthat will get a callback to- saveState()when the- SavedStateHandleis asked to save its state. (b/155106862)
- A new ViewTreeViewModelStoreOwner.get(View)API allows you to retrieve the containingViewModelStoreOwnergiven aViewinstance. You must upgrade to Activity1.2.0-alpha05, Fragment1.3.0-alpha05, and AppCompat1.3.0-alpha01to populate this correctly. AfindViewModelStoreOwner()Kotlin extension has been added tolifecycle-viewmodel-ktx. (aosp/1295522)
Bug Fixes
- Fixed an issue that caused the MutableLiveDataLint checks released in Lifecycle2.3.0-alpha01from being published alongside thelifecycle-livedata-core-ktxartifact. (b/155323109)
Version 2.3.0-alpha02
April 29, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha02 is released. Version 2.3.0-alpha02 contains these commits.
API Changes
- SavedStateViewModelFactorynow allows you to pass a null- Applicationto its constructor to better support cases where one is not readily available and support for- AndroidViewModelis not needed. (aosp/1285740)
Bug Fixes
- Improved cold start performance by avoiding class verification failure on API 28 and lower devices. (aosp/1282118)
Version 2.3.0-alpha01
March 4, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha01 is released. Version 2.3.0-alpha01 contains these commits.
New Features
- A new ViewTreeLifecycleOwner.get(View)API allows you to retrieve the containingLifecycleOwnergiven aViewinstance. You must upgrade to Activity1.2.0-alpha01and Fragment1.3.0-alpha01to populate this correctly. AfindViewTreeLifecycleOwnerKotlin extension is available inlifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
- Added a new Lint check that warns you when setting a nullvalue on aMutableLiveDatathat has been defined in Kotlin as non-null. This is available when using thelivedata-core-ktxorlivedata-ktxartifacts. (aosp/1154723, aosp/1159092)
- A new lifecycle-runtime-testingartifact is available that provides aTestLifecycleOwnerthat implementsLifecycleOwnerand provides a thread safe mutableLifecycle. (aosp/1242438)
Bug fixes
- The lifecycle-runtimeartifact now has a unique package name. (aosp/1187196)
Version 2.2.0
ViewModel-Savedstate Version 2.2.0
February 5, 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 is released.  Version 2.2.0 contains these commits.
Lifecycle ViewModel SavedState now shares the same version as other Lifecycle artifacts. The behavior of 2.2.0 is identical to the behavior of 1.0.0.
Version 2.2.0
January 22, 2020
androidx.lifecycle:lifecycle-*:2.2.0 is released.  Version 2.2.0 contains these commits.
Important changes since 2.1.0
- Lifecycle Coroutine Integration: The new lifecycle-runtime-ktxartifact adds integration between Lifecycle and Kotlin coroutines. Thelifecycle-livedata-ktxhas also been expanded to take advantage of coroutines. See Use Kotlin coroutines with Architecture Components for more details.
- ViewModelProviders.of()deprecation:- ViewModelProviders.of()has been deprecated. You can pass a- Fragmentor- FragmentActivityto the new- ViewModelProvider(ViewModelStoreOwner)constructor to achieve the same functionality when using Fragment- 1.2.0.
- lifecycle-extensionsArtifact Deprecation: With the above deprecation of- ViewModelProviders.of(), this release marks the deprecation of the last API in- lifecycle-extensionsand this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such as- lifecycle-serviceif you’re using- LifecycleServiceand- lifecycle-processif you’re using- ProcessLifecycleOwner) rather than- lifecycle-extensionsas there will not be a future- 2.3.0release of- lifecycle-extensions.
- Gradle Incremental Annotation Processor: Lifecycle's annotation processor is incremental by default.
If your app is written in the Java 8 programming language you can use DefautLifecycleObserverinstead; and if it's written in the Java 7 programming language you can useLifecycleEventObserver.
Version 2.2.0-rc03
December 4, 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc03 is released.  Version 2.2.0-rc03 contains these commits.
Bug fixes
- Fixed a failure occurring when a mocked ViewModelwas stored inViewModelStoreand queried later with default factory.
- Fix a usage of Dispatchers.Main.immediateinlaunchWhenCreatedand similar methods to be called synchronously during corresponding lifecycle event. (aosp/1156203)
External contributions
- Thanks to Anders Järleberg for contributing the fix! (aosp/1156203)
- Thanks to Vsevolod Tolstopyatov from Jetbrains for reviewing an implementation of inlined execution.
Dependency changes
- Lifecycle Extensions now depends on Fragment 1.2.0-rc03.
Version 2.2.0-rc02
November 7, 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc02 is released.  Version 2.2.0-rc02 contains these commits.
Bug fixes
- Fixed a bug in the proguard setup of the library that affected devices running API 28+ if the target API is below 29. (b/142778206)
Version 2.2.0-rc01
October 23, 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc01 is released.  Version 2.2.0-rc01 contains these commits.
Bug fixes
- Fixed an issue where launchWhenCreatedand related methods would run one frame later than the associated lifecycle method due to its use ofDispatchers.Maininstead ofDispatchers.Main.immediate. (aosp/1145596)
External contributions
- Thanks to Nicklas Ansman for contributing the fix! (aosp/1145596)
Version 2.2.0-beta01
October 9, 2019
androidx.lifecycle:lifecycle-*:2.2.0-beta01 is released.  Version 2.2.0-beta01 contains these commits.
Bug fixes
- Fixed a regression introduced in Lifecycle 2.2.0-alpha05 in the ordering of ProcessLifecycleOwnerand the activity’sLifecycleOwnermoving to started and resumed on Android 10 devices. (aosp/1128132)
- Fixed a regression introduced in Lifecycle 2.2.0-alpha05which would cause aNullPointerExceptionwhen using version2.0.0or2.1.0oflifecycle-process. (b/141536990)
Version 2.2.0-alpha05
September 18, 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha05 is released.  Version 2.2.0-alpha05 contains these commits.
Bug fixes
- Fixed a race condition in coroutine livedata builder. b/140249349
Version 2.2.0-alpha04
September 5, 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha04 is released.  The commits included in this version can be found here.
New features
- lifecycleScope,- whenCreated,- whenStarted,- whenResumed,- viewModelScope, and the underlying implementation of- liveDatanow use- Dispatchers.Main.immediateinstead of- Dispatchers.Main. (b/139740492)
External contributions
- Thanks to Nicklas Ansman for contributing the move to Dispatchers.Main.immediate! (aosp/1106073)
Version 2.2.0-alpha03
August 7, 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha03 is released.  The commits included in this version can be found here.
New features
- Implementations of ViewModelStoreOwnercan now optionally implementHasDefaultViewModelProviderFactoryto provide a defaultViewModelProvider.Factory. This has been done for Activity1.1.0-alpha02, Fragment1.2.0-alpha02, and Navigation2.2.0-alpha01. (aosp/1092370, b/135716331)
API changes
- ViewModelProviders.of()has been deprecated. You can pass a- Fragmentor- FragmentActivityto the new- ViewModelProvider(ViewModelStoreOwner)constructor to achieve the same functionality. (aosp/1009889)
Version 2.2.0-alpha02
July 2, 2019
androidx.lifecycle:*:2.2.0-alpha02 is released.  The commits included in this version can be found here.
API changes
- Replaced LiveDataScope.initialValuewithLiveDataScope.latestValuewhich will track the current emitted value of theliveDatablock.
- Added a new overload to the liveDatabuilder that receivestimeoutparameter as typeDuration
Version 2.2.0-alpha01
May 7, 2019
androidx.lifecycle:*:2.2.0-alpha01 is released.  The commits included in this version can be found here.
New features
- This release adds new features that adds support for Kotlin coroutines for Lifecycle and LiveData. Detailed documentation on them can be found here.
ViewModel-SavedState Version 1.0.0
Version 1.0.0
January 22, 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 is released.  Version 1.0.0 contains these commits.
Important features in 1.0.0
- New SavedStateHandle class was added. It enables your ViewModelclasses to access and to contribute to the saved state. This object can be received in constructor ofViewModelclass and factories provided by default by Fragments and AppCompatActivity will injectSavedStateHandleautomatically.
- AbstractSavedStateViewModelFactory was added. It allows you to create  custom factories for your ViewModeland provide them access toSavedStateHandle.
ViewModel-Savedstate Version 1.0.0-rc03
December 4, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 is released.  Version 1.0.0-rc03 contains these commits.
Dependency changes
- Lifecycle ViewModel SavedState now depends on Lifecycle 2.2.0-rc03.
Viewmodel-Savedstate Version 1.0.0-rc02
November 7, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 is released.  Version 1.0.0-rc02 contains these commits.
Dependency changes
- Now depends on lifecycle 2.2.0-rc02.
ViewModel-SavedState Version 1.0.0-rc01
October 23, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 is released with no changes from 1.0.0-beta01.  Version 1.0.0-rc01 contains these commits.
ViewModel-Savedstate Version 1.0.0-beta01
October 9, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 is released.  Version 1.0.0-beta01 contains these commits.
Bug fixes
- Fixed an issue where accessing a SavedState ViewModel for the first time in Activity.onActivityResult()would result in anIllegalStateException. (b/139093676)
- Fixed an IllegalStateExceptionwhen usingAbstractSavedStateViewModelFactory. (b/141225984)
ViewModel-SavedState Version 1.0.0-alpha05
September 18, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 is released.  Version 1.0.0-alpha05 contains these commits.
API changes
- SavedStateViewModelFactoryno longer extends- AbstractSavedStateViewModelFactoryand- SavedStateHandleis created only for ViewModels that requested have it (aosp/1113593)
ViewModel-SavedState Version 1.0.0-alpha03
August 7, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 is released.  The commits included in this version can be found here.
Breaking Changes
- lifecycle-viewmodel-savedstateno longer depends on- fragmentand the related- SavedStateViewModelFactory(Fragment)and- SavedStateViewModelFactory(FragmentActivity)constructors have been removed. Instead,- SavedStateViewModelFactoryis now the default factory for Activity- 1.1.0-alpha02, Fragment- 1.2.0-alpha02, and Navigation- 2.2.0-alpha01. (b/135716331)
ViewModel-SavedState Version 1.0.0-alpha02
July 2, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 is released.  The commits included in this version can be found here.
New features
- Added SavedStateHandle.getLiveData()overload which accepts a default value.
API Changes
- SavedStateVMFactoryis renamed to- SavedStateViewModelFactory.
- AbstractSavedStateVMFactoryis renamed to- AbstractSavedStateViewModelFactory.
ViewModel-Savedstate Version 1.0.0-alpha01
March 13, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 is released.  The full commit log for this initial release can be found here.
New features
- Now ViewModelscan contribute to savedstate. To do that you use newly introduced viewmodel’s factorySavedStateVMFactoryand your ViewModel should have a constructor that receivesSavedStateHandleobject as a parameter.
Version 2.1.0
Important changes since 2.0.0
- Added LifecycleEventObserverfor the cases when a stream of lifecycle events is needed. It is a public API instead of a hiddenGenericLifecycleObserverclass.
- Added ktx extensions for LiveData.observemethods andTransformations.*methods.
- Added Transformations.distinctUntilChanged, which creates a new LiveData object that does not emit a value until the sourceLiveDatavalue has been changed.
- Added coroutine support in ViewModels by adding the extension property ViewModel.viewModelScope.
Version 2.1.0
September 5, 2019
androidx.lifecycle:lifecycle-*:2.1.0 is released.  The commits included in this version can be found here.
Version 2.1.0-rc01
July 2, 2019
androidx.lifecycle:*:2.1.0-rc01 is released with no changes from androidx.lifecycle:*:2.1.0-beta01.  The commits included in this version can be found here.
Version 2.1.0-beta01
May 7, 2019
androidx.lifecycle:*:2.1.0-beta01 is released.  The commits included in this version can be found here.
New features
- Lifecycles are graduated to beta: api introduced in previous alphas such as liveDataextension functions for transformations and observations,ViewModelinitialisation with property delegation and others are stabilised and not going to change.
Version 2.1.0-alpha04
April 3, 2019
androidx.lifecycle:*:2.1.0-alpha04 is released.  The commits included in this version can be found here.
API changes
- Breaking change: the underlying API behind by viewModels()andby activityViewModels()has been changed to support aViewModelStoredirectly, rather than only aViewModelStoreOwner. (aosp/932932)
Version 2.1.0-alpha03
March 13, 2019
androidx.lifecycle:*:2.1.0-alpha03 is released.  The full list of commits included in this version can be found here.
API changes
- ViewModelProvider.KeyedFactorywas removed. Second interface in addition to- ViewModelProvider.Factorydidn’t compose well with new features as property delegation in Kotlin- by viewmodels {}. (aosp/914133)
Version 2.1.0-alpha02
January 30, 2019
androidx.lifecycle 2.1.0-alpha02 is released.
API changes
- LifecycleRegistrynow contains a- setCurrentState()method that replaces the now deprecated- setState()method. (aosp/880715)
Bug fixes
- Fixed an issue where mock ViewModelinstances would crash when the containingViewModelStorewas cleared. b/122273087
Version 2.1.0-alpha01
December 17, 2018
androidx.lifecycle 2.1.0-alpha01 is released.
New features
- Added LifecycleEventObserverfor the cases when a stream of lifecycle events is needed. It is a public api instead of a hiddenGenericLifecycleObserverclass.
- Added ktx extensions for LiveData.observemethods andTransformations.*methods.
- Method Transformations.distinctUntilChangedwas added. It creates a newLiveDataobject that does not emit a value until the source LiveData value has been changed.
- Coroutine support in ViewModels: extension property ViewModel.viewModelScopewas added.
- Added ViewModelProvider.KeyedFactory, a factory for ViewModels that receiveskeyandClassincreatemethod.
Version 2.0.0
Version 2.0.0
September 21, 2018
Lifecycle 2.0.0 is released with one bugfix from 2.0.0-rc01 in ViewModel.
Bug Fixes
- Fixed a ViewModel proguard rule that incorrectly removed constructors b/112230489
Version 2.0.0-beta01
July 2, 2018
Bug Fixes
- Fixed LifecycleObserver proguard rule to keep only implementations, not subinterfaces b/71389427
- Fixed ViewModel proguard rules to allow obfuscation and shrinking
Pre-AndroidX Versions
For the pre-AndroidX versions of Lifecycle that follow, include these dependencies:
dependencies {
    def lifecycle_version = "1.1.1"
    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"
    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
Version 1.1.1
March 21, 2018
Only one small change: android.arch.core.util.Function is moved from arch:runtime to arch:common. This allows it to be used without the runtime dependency, e.g. in paging:common below.
lifecycle:common is a dependency of lifecycle:runtime, so this change doesn’t affect lifecycle:runtime directly, only modules that depend directly on lifecycle:common, as Paging does.
Version 1.1.0
January 22, 2018
Packaging Changes
New, much smaller dependencies are now available:
- android.arch.lifecycle:livedata:1.1.0
- android.arch.lifecycle:viewmodel:1.1.0
API Changes
- The deprecated LifecycleActivityandLifecycleFragmenthave now been removed - please useFragmentActivity,AppCompatActivityor supportFragment.
- @NonNullannotations have been added to- ViewModelProvidersand- ViewModelStores
- ViewModelProvidersconstructor has been deprecated - please use its static methods directly
- ViewModelProviders.DefaultFactoryhas been deprecated - please use- ViewModelProvider.AndroidViewModelFactory
- The static ViewModelProvider.AndroidViewModelFactory.getInstance(Application)method has been added to retrieve a staticFactorysuitable for creatingViewModelandAndroidViewModelinstances.
