Ciclo de vida
En esta tabla, se enumeran todos los artefactos del grupo androidx.lifecycle.
| Artefacto | Versión estable | Versión potencial | Versión beta | Versión alfa |
|---|---|---|---|---|
| lifecycle-* | 2.9.4 | - | 2.10.0-beta01 | - |
| lifecycle-viewmodel-navigation3 | - | - | 2.10.0-beta01 | - |
Cómo declarar dependencias
Para agregar una dependencia en Lifecycle, debes agregar el repositorio de Maven de Google a tu proyecto. Lee el repositorio de Maven de Google para obtener más información.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:
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") }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 2.10
Versión 2.10.0-beta01
22 de octubre de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.10.0-beta01. La versión 2.10.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
ViewModelStoreNavEntryDecoratorDefaultaViewModelStoreNavEntryDecoratorDefaults, con una "s". (I6d27b, b/444447434)
Correcciones de errores
rememberLifecycleOwnerya no falla si el propietario recibe un eventoLifecycle.Event.ON_DESTROYantes de pasar aLifeycle.State.CREATED. (I6f98e, b/444594991)
Versión 2.10.0-alpha05
8 de octubre de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.10.0-alpha05. La versión 2.10.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- El
removeViewModelStoreOnPopCallback()ahora forma parte de un objetoViewModelStoreNavEntryDecoratorDefault, que es donde otras plataformas y otras implementaciones pueden llamar al valor predeterminado. (Ia1f23, b/444447434) - Se refactorizó
ViewModelStoreNavEntryDecoratorde una función a una clase para reflejar mejor su funcionalidad como fábrica paraNavEntryDecoratory se cambió el nombre del parámetroshouldRemoveViewModelStoredel decorador aremoveViewModelStoreOnPoppara aclarar que esta devolución de llamada se invoca solo cuando se extrae una entrada debackStack. (Iefdc5, b/444447434)
Versión 2.10.0-alpha04
24 de septiembre de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.10.0-alpha04. La versión 2.10.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Refactoriza el elemento
LifecycleOwnercomponible arememberLifecycleOwner. Ahora, la función devuelve elLifecycleOwnerdirectamente. Para proporcionar este propietario a una subcomposición, usaCompositionLocalProvider. (Ic57f0, b/444446629) - Se agregaron stubs de KMP a lifecycle-viewmodel-navigation3 para permitir que JetBrains proporcione bifurcaciones que completen estos destinos y, de este modo, admitan la CMP. (I44a4c)
Versión 2.10.0-alpha03
27 de agosto de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.10.0-alpha03. La versión 2.10.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Actualiza Compose a la versión 1.9.0. (I2b9de)
Versión 2.10.0-alpha02
13 de agosto de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.10.0-alpha02. La versión 2.10.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
El elemento
LifecycleOwnercomponible ahora puede crear un ciclo de vida raíz independiente. Si se configuraparent = nullde forma (explícita), el nuevo ciclo de vida opera de forma independiente de cualquier host (como unActivity,FragmentoNavBackStackEntry). Comienza en cuanto el elemento componible ingresa en la composición y se destruye automáticamente cuando sale de ella. (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 } }
Cambios en la API
- En el elemento
LifecycleOwnercomponible, se cambió el nombre del parámetroparentLifecycleOwneraparent. (I080bc)
Correcciones de errores
- El elemento componible
LifecycleOwnerahora mueve correctamente su ciclo de vida aDESTROYEDcuando se descarta. Esto evita posibles fugas para el código externo que contiene una referencia al ciclo de vida. (I9e5b7, b/433659048) - Se cambió el valor predeterminado de minSdk de la API 21 a la API 23 (Ibdfca, b/380448311, b/435705964, b/435705223).
Contribución externa
- Se quitaron los campos de respaldo internos innecesarios de
LifecycleOwner. Gracias a Jake Wharton por su contribución. (Ideddb)
Versión 2.10.0-alpha01
30 de julio de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.10.0-alpha01. La versión 2.10.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
Agrega una función de componibilidad
LifecycleOwnerpara habilitar la creación de ciclos de vida con alcance directamente dentro de la IU. Esto es útil para los componentes que necesitan administrar sus propios ciclos de vida de forma independiente. Para ver un ejemplo de cómo Navigation3 integra este nuevo elemento componible, consulta aosp/3708610. (76cbf7)@Composable fun MyComposable() { LifecycleOwner( maxLifecycle = RESUMED, parentLifecycleOwner = LocalLifecycleOwner.current, ) { val childLifecycleOwner = LocalLifecycleOwner.current } }
Cambios en la API
- Se agregó una función de fábrica de compiladores para
CreationExtras, que proporciona una API de Kotlin más idiomática y conveniente. (Iab2bd) - Se agregó compatibilidad nativa para tipos anulables en
SavedStateHandle.saved, lo que simplifica el guardado y la restauración de propiedades anulables. (I54d69, b/421325690) - Marca los constructores de
SavedStateHandlecomo@VisibleForTesting. (Iff0e0, b/408002794)
Versión 2.9
Versión 2.9.4
17 de septiembre de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.4. La versión 2.9.4 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error por el que no se aplicaba el complemento de Compose Compiler, lo que provocaba que los artefactos de KMP de Lifecycle se dañaran. (Ie95bc, b/443096483, b/443965665)
Versión 2.9.3
27 de agosto de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.3. La versión 2.9.3 contiene estas confirmaciones.
Nuevas funciones
- Se agregaron nuevos destinos de Kotlin Multiplatform (KMP) a los artefactos de
*-composede Lifecycle. Lifecycle ahora admite las siguientes plataformas en total: JVM (Android y computadoras), nativa (Linux, iOS, watchOS, macOS, MinGW) y web (JavaScript, WasmJS). (I0a0e4)
Correcciones de errores
- Actualiza
androidx.annotationa la versión 1.9.1 (Ic9e4f, b/397701294).
Versión 2.9.2
16 de julio de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.2. La versión 2.9.2 contiene estas confirmaciones.
Correcciones de errores
- Se agregaron nuevos destinos de Kotlin Multiplatform (KMP) a los artefactos de Lifecycle. Lifecycle ahora admite las siguientes plataformas en total: JVM (Android y computadoras), nativa (Linux, iOS, watchOS, macOS, MinGW) y web (JavaScript, WasmJS). Ten en cuenta que no se agregaron destinos nuevos de KMP a los artefactos de
*-compose, ya que esto depende de la versión estable de Compose 1.9. (I01cb8).
Actualizaciones de dependencias
- Lifecycle ahora depende de Annotation
1.9.1para habilitar la compatibilidad con los nuevos destinos de KMP (Ic9e4f, b/397701294).
Versión 2.9.1
4 de junio de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.1. La versión 2.9.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el problema por el que
SavedStateHandle.remove(key)no borraba los estados deSavedStateHandle.getMutableStateFlow(key). (d5f939, b/418746333)
Versión 2.9.0
7 de mayo de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0. La versión 2.9.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.8.0
- Hay disponible un nuevo artefacto
androidx.lifecycle:lifecycle-viewmodel-testingde KMP que proporciona una claseViewModelScenariopara probarViewModelsde forma aislada, con compatibilidad paraonClearedySavedStateHandle, así como para probar la muerte y la recreación del proceso a través derecreate(). - Agrega
getMutableStateFlowaSavedStateHandlepara devolver unMutableStateFlow. Esta nueva función es exclusiva de la clave y no se puede usar congetLiveData. Se generará una excepción si intentas usar ambos para acceder al mismo estado. CreationExtrasahora incluye sobrecargas de operadores similares a mapas para permitir la manipulación idiomática del contenido en Kotlin. Permite el uso dein,+=y+conCreationExtras.
Compatibilidad con la serialización de KotlinX
Con la compatibilidad de KotlinX Serialization agregada en SavedState
1.3.0, presentamossaved, un delegado de propiedad diferido, para facilitar el almacenamiento de clases@Serializableen unSavedStateHandley que esas clases se restablezcan automáticamente después de la finalización y la recreación del proceso. Ten en cuenta que el delegadosavedes diferido y no llamará a la lambdainitni guardará nada enSavedStateHandlehasta que se acceda a él.@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
- El módulo
lifecycle-testingahora es compatible con KMP, incluidas las APIs comoTestLifecycleOwner. - El módulo
lifecycle-viewmodel-savedstateahora es compatible con KMP, incluidas las APIs comoSavedStateHandle. androidx.compose.ui.platform.LocalLifecycleOwnerahora está disponible en el conjunto de fuentes común.NewInstanceFactoryahora está disponible en los destinos de JVM para computadoras y Android.
Cambios en el comportamiento
- El estado
Lifecycle.DESTROYEDes terminal, y cualquier intento de mover unLifecycledesde él a cualquier otro estado ahora generará unIllegalStateException. SavedStateHandleya no incluye ningúnSavedStateProvider.saveState()en el que elBundledevuelto esté vacío.
Versión 2.9.0-rc01
23 de abril de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-rc01. La versión 2.9.0-rc01 contiene estas confirmaciones.
Advertencia de compatibilidad de la API de Lint
- JetBrains cambió
KaCallableMemberCallde una clase a una interfaz, lo que interrumpe la compatibilidad binaria. Esto puede provocar fallas si la versión de AGP de tu proyecto difiere de la versión que se usó para compilar las verificaciones de lint. Esta actualización se realizó en aosp/3577172, pero no se incluyó en las notas de la versión. La aclaramos aquí. Solución recomendada: Actualiza a la versión estable más reciente del AGP. Si no puedes actualizar por completo, usaandroid.experimental.lint.versionpara alinear las verificaciones de lint con tu versión de AGP. Consulta Cambios en el comportamiento del tiempo de ejecución de Compose para obtener más detalles.
Versión 2.9.0-beta01
9 de abril de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-beta01. La versión 2.9.0-beta01 contiene estas confirmaciones.
Cambios en la API
Lifecycle ViewModel Composeahora usa la misma configuración de Kotlin Multiplatform que Compose Runtime 1.7.1 y versiones posteriores: ahora se quitaron los artefactos-desktopy se agregaron los artefactos-jvmStubsy-linuxx64Stubs. Ninguno de estos destinos está diseñado para usarse, sino que son marcadores de posición para ayudar con los esfuerzos de Jetbrains Compose. (I5cb14, b/406592090)
Actualizaciones de dependencias
- Esta biblioteca ahora está orientada al nivel de lenguaje Kotlin 2.0 y requiere KGP 2.0.0 o una versión posterior. (Idb6b5)
Lifecycle ViewModel Composeahora depende de Compose 1.7.8. (I5cb14, b/406592090)
Versión 2.9.0-alpha13
26 de marzo de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha13 sin cambios públicos notables. La versión 2.9.0-alpha13 contiene estas confirmaciones.
Versión 2.9.0-alpha12
12 de marzo de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha12. La versión 2.9.0-alpha12 contiene estas confirmaciones.
Cambios en la API
- Agrega la anotación
@MainThreadaViewModelProvider.geten todas las plataformas de KMP compatibles. (I7e8dd, b/397736115) - Se cambió el nombre de
SavedState*DelegatesporSavedState*Delegate. (I8589b, b/399629301)
Versión 2.9.0-alpha11
26 de febrero de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha11. La versión 2.9.0-alpha11 contiene estas confirmaciones.
Cambios en la API
- Se agregó el parámetro
SavedStateConfiga los delegados desaved()(I39b3a).
Versión 2.9.0-alpha10
12 de febrero de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha10. La versión 2.9.0-alpha10 contiene estas confirmaciones.
Cambios en la API
- Mueve
MutableStateSerializerasavedstate-composedesdelifecycle-viewmodel-compose. (I4f690, b/378895074)
Contribución externa
- Se agregó un nuevo problema de Lint para llamar a
Lifecycle::currentStateen la composición. En su lugar, se sugiere usarcurrentStateAsalue().valuepara garantizar que los cambios en el estado del ciclo de vida provoquen correctamente la recomposición. ¡Gracias, Steven Schoen! (Iad484)
Versión 2.9.0-alpha09
29 de enero de 2025
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha09. La versión 2.9.0-alpha09 contiene estas confirmaciones.
Nuevas funciones
- Se agregó
MutableStateSerializerpara serializarandroidx.compose.runtime.MutableState. (Idfc48, b/378895074)
Cambios en la API
- Se reemplazaron las funciones delegadas
SavedStateHandle.saved()sobrecargadas por parámetros predeterminados (Icd1c1). AbstractSavedStateViewModelFactoryestá en desuso, ya que crea unSavedStateHandlepara cadaViewModel, lo que genera una sobrecarga innecesaria. UsaViewModelProvider.FactoryconCreationExtras.createSavedStateHandleen su lugar para crearViewModelde manera más eficiente. (Ia920b, b/388590327)
Versión 2.9.0-alpha08
11 de diciembre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha08. La versión 2.9.0-alpha08 contiene estas confirmaciones.
Nuevas funciones
- Agrega
ViewModelScenario.recreatepara simular una muerte del proceso del sistema y recrear elViewModelen prueba y todos los componentes asociados. (Id6a69, b/381063087) - Las instancias de
LifecycleOwneryViewModelStoreOwnerrecuperadas a través de sus respectivas APIs defindViewTreeahora se pueden resolver a través de elementos superiores disjuntos de una vista, como unViewOverlay. Consulta las notas de la versión de core o la documentación enViewTree.setViewTreeDisjointParentpara obtener más información sobre los elementos superiores de vistas no conjuntas. (I800f4)
Cambios en la API
- Se hizo que los nombres y la organización de paquetes sean más coherentes con
SavedStateRegistryOwnerDelegate(I8c135, b/376026744).
Correcciones de errores
- Esta biblioteca ahora usa anotaciones de nulabilidad de JSpecify, que son de uso de tipo. Los desarrolladores de Kotlin deberían usar el siguiente argumento del compilador para aplicar el uso correcto:
-Xjspecify-annotations=strict(este es el valor predeterminado a partir de la versión 2.1.0 del compilador de Kotlin). (Ie4340, b/326456246) - Documenta la secuencia de borrado de
ViewModel.onCleared. (I586c7, b/363984116)
Versión 2.9.0-alpha07
13 de noviembre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha07. La versión 2.9.0-alpha07 contiene estas confirmaciones.
Compatibilidad con Kotlin Multiplatform
- Lifecycle
ViewModel SavedStateahora es compatible con KMP. Esto te permite usarSavedStateHandleen el código común. (Ib6394, b/334076622)
Compatibilidad con la serialización de KotlinX
Con la compatibilidad de KotlinX Serialization agregada en SavedState
1.3.0-alpha05, presentamossaved, un delegado de propiedad diferido, para facilitar el almacenamiento de clases@Serializableen unSavedStateHandley que esas clases se restablezcan automáticamente después de la finalización y la recreación del proceso. Ten en cuenta que el delegadosavedes diferido y no llamará a la lambdainitni guardará nada enSavedStateHandlehasta que se acceda a él. (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 } }
Cambios en la API
- Agrega
getMutableStateFlowaSavedStateHandlepara devolver unMutableStateFlow. Esta nueva función es exclusiva de la clave y no se puede usar congetLiveData. Se generará una excepción si intentas usar ambos para acceder al mismo estado. (I04a4f, b/375408415)
Versión 2.9.0-alpha06
30 de octubre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha06. La versión 2.9.0-alpha06 contiene estas confirmaciones.
Cambios en el comportamiento
- El estado
Lifecycle.DESTROYEDes terminal, y cualquier intento de mover unLifecycledesde él a cualquier otro estado ahora generará unIllegalStateException. (I116c4, b/370577987) SavedStateHandleya no incluye ningúnSavedStateProvider.saveState()en el que elBundledevuelto esté vacío. (I910b5, b/370577987)
Correcciones de errores
- Ahora,
Lifecycle.eventFlowse completa correctamente cuandoLifecycleesDESTROYED(I293b2, b/374043130).
Versión 2.9.0-alpha05
16 de octubre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha05 sin cambios notables. La versión 2.9.0-alpha05 contiene estas confirmaciones.
Versión 2.9.0-alpha04
2 de octubre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha04. La versión 2.9.0-alpha04 contiene estas confirmaciones.
Kotlin Multiplatform
- El módulo
lifecycle-viewmodel-savedstateahora está configurado para ser compatible con KMP en preparación para que las APIs comoSavedStateHandleestén disponibles en el conjunto de fuentes común en una versión futura. (I503ed, I48764, b/334076622)
Versión 2.9.0-alpha03
18 de septiembre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha03. La versión 2.9.0-alpha03 contiene estas confirmaciones.
Correcciones de errores
- Desde Lifecycle
2.8.6: El error de LintNullSafeMutableLiveDatatiene una mejor compatibilidad con las conversiones inteligentes, lo que evita los falsos positivos. (85fed6, b/181042665)
Actualizaciones de dependencias
- Desde Lifecycle
2.8.6: Lifecycle Runtime Compose ahora depende de Compose Runtime1.7.1 - Lifecycle Runtime ahora depende de ProfileInstaller
1.4.0
Versión 2.9.0-alpha02
4 de septiembre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha02. La versión 2.9.0-alpha02 contiene estas confirmaciones.
Correcciones de errores
- A partir de Lifecycle
2.8.5: Se actualizaron las reglas de ProGuard deandroidx.lifecycle.ReportFragmentpara permitir la ofuscación . (ff898e1)
Contribución externa
- Mueve
androidx.compose.ui.platform.LocalLifecycleOwneral conjunto de orígenes común (KMP). Gracias a Ivan Matkov de JetBrains por su contribución. (8cd5d03) - De Lifecycle
2.8.5: El delegado de extensión SavedStateHandle.saveable` ahora admite valores anulables. Gracias a Roman Kalukiewicz por su contribución. (0d78ea6)
Versión 2.9.0-alpha01
7 de agosto de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.9.0-alpha01. La versión 2.9.0-alpha01 contiene estas confirmaciones.
Kotlin Multiplatform
lifecycle-testingahora es compatible con KMP. (Iea41e)- Se agregó compatibilidad con el destino multiplataforma de Kotlin
linuxArm64(I139d3, b/338268719).
Nuevas funciones
- Hay disponible un nuevo artefacto
androidx.lifecycle:lifecycle-viewmodel-testingde KMP que proporciona una claseViewModelScenariopara probar ViewModels de forma aislada, con compatibilidad paraonCleared(todas las plataformas) ySavedStateHandle(solo Android). (337f68d, c9b3409, 9799a95c, b/264602919) - La creación de un
ViewModelconViewModelProviderahora es segura para subprocesos; se quitaron las anotaciones@MainThread. (Ifd978, b/237006831)
Cambios en la API
- Agrega la función de fábrica
CreationExtras.Key()para simplificar la creación de objetosCreationExtras.Keyanónimos. (I970ee) CreationExtrasahora incluye sobrecargas de operadores similares a mapas para permitir la manipulación idiomática del contenido en Kotlin. Permite el uso dein,+=y+conCreationExtras. (Ib4353)CreationExtrasahora implementa los métodosequals,hashCodeytoString. (Ib4353)NewInstanceFactoryahora está disponible en los destinos de JVM para computadoras y Android. (d3d0892)- Propiedad de extensión intercalada para exponer de forma segura el objeto Application subyacente en la versión 2.0 del lenguaje Kotlin (I39df2)
Correcciones de errores
- Se quitó el esquema manual del acceso a las nuevas APIs de la plataforma, ya que esto sucede automáticamente a través del modelado de APIs cuando se usa R8 con AGP 7.3 o versiones posteriores (p.ej., R8 versión 3.3) y para todas las compilaciones cuando se usa AGP 8.1 o versiones posteriores (p.ej., D8 versión 8.1). Se recomienda a los clientes que no usan AGP actualizar a la versión 8.1 o posterior de D8. Consulta este artículo para obtener más detalles. (If6b4c, b/345472586)
Versión 2.8
Versión 2.8.7
30 de octubre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.7. La versión 2.8.7 contiene estas confirmaciones.
Cambios en la API
androidx.compose.ui.platform.LocalLifecycleOwnerahora está disponible en el conjunto de fuentes comunes (KMP). (6a3f5b3)lifecycle-runtime-compose: Se quitaron los artefactosdesktopy se agregaron los artefactos-jvmStubsy-linuxx64Stubs. Ninguno de estos destinos está diseñado para usarse, sino que son marcadores de posición para ayudar con los esfuerzos de Jetbrains Compose. (6a3f5b3)
Versión 2.8.6
18 de septiembre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.6. La versión 2.8.6 contiene estas confirmaciones.
Correcciones de errores
- El error de
NullSafeMutableLiveDataLint mejoró la compatibilidad con las conversiones inteligentes, lo que evita los falsos positivos. (85fed6, b/181042665)
Actualizaciones de dependencias
- Lifecycle Runtime Compose ahora depende de Compose Runtime
1.7.1
Versión 2.8.5
4 de septiembre de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.5. La versión 2.8.5 contiene estas confirmaciones.
Correcciones de errores
- Actualiza las reglas de ProGuard de
androidx.lifecycle.ReportFragmentpara permitir la ofuscación . (ff898e1)
Contribución externa
- El delegado de extensión
SavedStateHandle.saveableahora admite valores anulables. Gracias a Roman Kalukiewicz por su contribución. (0d78ea6)
Versión 2.8.4
24 de julio de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.4. La versión 2.8.4 contiene estas confirmaciones.
Correcciones de errores
- Ahora,
LiveData.asFlow()controla correctamente los casos en los que el Flow devuelto se completa inmediatamente después de recibir un valor ya establecido enLiveData(por ejemplo, cuando se usatake(1)). (I9c566) - Ahora, la finalización de
Lifecycle*Effectes idempotente (es decir, si se llamó aonStopOrDisposeporque se detuvo el ciclo de vida, no se volverá a llamar al desecharse, a menos que el ciclo de vida vuelva aSTARTED). (I5f607, b/352364595)
Versión 2.8.3
1 de julio de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.3. La versión 2.8.3 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema de compatibilidad con versiones anteriores de Lifecycle 2.8 con Compose 1.6.0 y versiones anteriores cuando se usaba la reducción de código. (aosp/3133056, b/346808608)
Versión 2.8.2
12 de junio de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.2. La versión 2.8.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron los errores de
CompositionLocal LocalLifecycleOwner not presentcuando se usaba Lifecycle 2.8.X con Compose 1.6.X o versiones anteriores. Ahora puedes usar Lifecycle 2.8.2 con cualquier versión de Compose sin necesidad de soluciones alternativas. (aosp/3105647, b/336842920) ViewModelProviderya no fallará cuando se combinen versiones anteriores de dependencias decompileOnlyLifecycle con versiones 2.8 y posteriores, lo que corrige problemas con bibliotecas como LeakCanary. (I80383, b/341792251)
Versión 2.8.1
29 de mayo de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.1. La versión 2.8.1 contiene estas confirmaciones.
Correcciones de errores
- Ahora,
lifecycle-viewmodel-composesolo tiene una dependencia común encompose-runtime, lo que quita su dependencia común encompose-ui. El artefacto de Android conserva sucompose-uipara la compatibilidad. (aosp/3079334, b/339562627) - La integración de
ViewModelensaveableque usa delegados de propiedad ahora usa el nombre de la clase como parte de la clave generada automáticamente, lo que evita conflictos si varias clases usan el mismoSavedStateHandle. (aosp/3063463)
Versión 2.8.0
14 de mayo de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.0. La versión 2.8.0 contiene estas confirmaciones.
Cambios importantes desde 2.7.0
LocalLifecycleOwnerse trasladó de la IU de Compose alifecycle-runtime-composepara que sus APIs de ayuda basadas en Compose se puedan usar fuera de la IU de Compose.- El artefacto
lifecycle-runtime-composeahora contiene las APIs dedropUnlessResumedydropUnlessStarted, que te permiten descartar clics o cualquier otro evento que ocurra incluso después de queLifecycleOwnerhaya caído por debajo delLifecycle.Statedeterminado. Por ejemplo, se puede usar con Navigation Compose para evitar controlar eventos de clic después de que ya comenzó una transición a otra pantalla:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } ViewModel.viewModelScopeahora es un parámetro de constructor anulable, lo que te permite insertar tu propio dispatcher ySupervisorJob(), o anular el valor predeterminado con elbackgroundScopedisponible enrunTest. (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) }Se reescribió
ViewModelen Kotlin y ahora usaAutoClosableen lugar deCloseable. Ahora admite la adición de objetosAutoCloseablecon unkeyque permite recuperarlos a través degetCloseable().Llamar a
LifecycleStartEffectyLifecycleResumeEffectsin una clave ahora es un error, siguiendo la misma convención que la API deDisposableEffectque reflejan estas APIs.LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)dejó de estar disponible y se reemplazó porLiveData.toPublisher(lifecycleOwner).Las extensiones de Kotlin
lifecycle-livedata-core-ktxahora se trasladaron al módulolifecycle-livedata-core.Se refactorizó el
NullSafeMutableLiveDatapara evitar muchos falsos positivos.
Compatibilidad del ciclo de vida de Kotlin Multiplatform
Las APIs principales de Lifecycle en Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event y LifecycleRegistry ahora se incluyen en artefactos compatibles con Kotlin Multiplatform.
Artefactos afectados:
lifecycle-commonmueve la mayoría de las APIs acommony admite JVM y iOS, además de Android.lifecycle-runtimemueve la mayoría de las APIs acommony admite JVM y iOS, además de Android.lifecycle-runtime-ktxahora está vacío, y todas las APIs se movieron alifecycle-runtime.lifecycle-runtime-composemueve todas las APIs acommony envía un artefacto de Android que coincide con la compatibilidad multiplataforma deandroidx.compose.
Compatibilidad de ViewModel con Kotlin Multiplatform
El artefacto lifecycle-viewmodel y las APIs como ViewModel, ViewModelStore, ViewModelStoreOwner y ViewModelProvider ahora se incluyen en artefactos compatibles con Kotlin Multiplataforma.
Para adaptarse a este cambio, los métodos como los de ViewModelProvider que tomaban un java.lang.Class<T> ahora tienen un método equivalente que toma un kotlin.reflect.KClass<T>.
Se mantuvo la compatibilidad binaria en Android, pero hay algunos cambios notables cuando se compara la superficie de la API de Android con la superficie de la API común:
- La construcción de una instancia de
ViewModelProviderahora se realiza a través de los métodosViewModelProvider.create()en lugar de llamar directamente a su constructor. ViewModelProvider.NewInstanceFactoryyViewModelProvider.AndroidViewModelFactorysolo están disponibles en Android.- Se recomienda que las Factories personalizadas extiendan desde
ViewModelProvider.Factoryy usen el métodocreateque toma unCreationExtraso usen el DSL de KotlinviewModelFactory.
- Se recomienda que las Factories personalizadas extiendan desde
- Usar
ViewModelProvidersin una fábrica personalizada en plataformas que no son de JVM generará unUnsupportedOperationException. En las plataformas de JVM, la compatibilidad se conserva usando el constructor de ViewModel sin argumentos si no se proporciona una fábrica personalizada. viewModelScoperecurrirá a unEmptyCoroutineContexten las plataformas en las queDispatchers.Mainno esté disponible (p.ej., Linux).
Artefactos afectados:
lifecycle-viewmodelmueve la mayoría de las APIs acommony admite JVM y iOS, además de Android.lifecycle-viewmodel-ktxahora está vacío, y todas las APIs se movieron alifecycle-viewmodel.lifecycle-viewmodel-composemueve todas las APIs acommony envía un artefacto de Android que coincide con la compatibilidad multiplataforma deandroidx.compose.
Cambios en el comportamiento
InitializerViewModelFactory(incluida la función de compiladorviewModelFactory) ahora arrojará unIllegalArgumentExceptionsi ya se agregó uninitializercon el mismoclazz: KClass<VM : ViewModel>. (Ic3a36)
Errores conocidos
lifecycle-*:2.8.0requiere una versión mínima de Compose de 1.7.0-alpha05 (b/336842920).
Versión 2.8.0-rc01
1 de mayo de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.0-rc01. La versión 2.8.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que el perfil de Baseline para las clases
lifecycle-commonno se empaquetaba correctamente. Ahora se empaquetan en el AAR delifecycle-runtime. (aosp/3038274, b/322382422) - Se corrigió un cambio de ordenamiento no intencional en la forma en que se borran las instancias de
AutoCloseableadjuntas a un ViewModel. Se restableció el orden anterior deaddCloseable(String, AutoCloseable), luegoaddClosable(AutoCloseable)y, por último,onCleared(). (aosp/3041632) - Se mejoró el comportamiento de creación predeterminado para
viewModelScopeen entornos de escritorio nativos y de JVM. (aosp/3039221)
Contribución externa
- Gracias a Victor Kropp por mejorar la verificación del subproceso principal en JVM Desktop. (aosp/3037116)
Versión 2.8.0-beta01
17 de abril de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.0-beta01. La versión 2.8.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- El artefacto
lifecycle-runtime-composeahora es compatible con Kotlin Multiplatform, ya que su código se trasladó acommony se incluye un artefacto de Android, lo que coincide con la compatibilidad multiplataforma deandroidx.compose. (If7a71, I4f4a0, b/331769623)
Versión 2.8.0-alpha04
3 de abril de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.0-alpha04. La versión 2.8.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- El artefacto
lifecycle-viewmodel-composeahora es compatible con Kotlin Multiplatform, ya que su código se trasladó acommony se envía un artefacto de Android, lo que coincide con la compatibilidad multiplataforma deandroidx.compose. Para adaptarse a este cambio, el métodoviewModelde Composable ahora acepta unKClassademás de unjava.lang.Class. (b/330323282)
Correcciones de errores
- Se refactorizó el
NullSafeMutableLiveDatapara evitar muchos falsos positivos. (I2d8c1, Iafb18, I03463, I7ecef)
Actualización de dependencia
- El artefacto
lifecycle-viewmodel-composeahora depende de Compose 1.6.0. - Lifecycle ahora depende de Profile Installer 1.3.1.
Versión 2.8.0-alpha03
20 de marzo de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.0-alpha03. La versión 2.8.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
ViewModel.viewModelScopeahora es un parámetro de constructor anulable, lo que te permite insertar tu propio dispatcher ySupervisorJob(), o anular el valor predeterminado con elbackgroundScopedisponible enrunTest. (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) }
Compatibilidad con Kotlin Multiplatform
El artefacto lifecycle-viewmodel y las APIs como ViewModel, ViewModelStore, ViewModelStoreOwner y ViewModelProvider ahora se incluyen en artefactos compatibles con Kotlin Multiplataforma. (b/214568825)
Para adaptarse a este cambio, los métodos como los de ViewModelProvider que tomaban un java.lang.Class<T> ahora tienen un método equivalente que toma un kotlin.reflect.KClass<T>.
Se mantuvo la compatibilidad binaria en Android, pero hay algunos cambios notables cuando se compara la superficie de la API de Android con la superficie de la API común:
- La construcción de una instancia de
ViewModelProviderahora se realiza a través de los métodosViewModelProvider.create()en lugar de llamar directamente a su constructor. ViewModelProvider.NewInstanceFactoryyViewModelProvider.AndroidViewModelFactorysolo están disponibles en Android.- Se recomienda que las Factories personalizadas extiendan desde
ViewModelProvider.Factoryy usen el métodocreateque toma unCreationExtraso usen el DSL de KotlinviewModelFactory.
- Se recomienda que las Factories personalizadas extiendan desde
- Usar
ViewModelProvidersin una fábrica personalizada en plataformas que no son de JVM generará unUnsupportedOperationException. En las plataformas de JVM, la compatibilidad se conserva usando el constructor de ViewModel sin argumentos si no se proporciona una fábrica personalizada. viewModelScoperecurrirá a unEmptyCoroutineContexten las plataformas en las queDispatchers.Mainno esté disponible (p.ej., Linux).
Cambios en el comportamiento
InitializerViewModelFactory(incluida la función de compiladorviewModelFactory) ahora arrojará unIllegalArgumentExceptionsi ya se agregó uninitializercon el mismoclazz: KClass<VM : ViewModel>. (Ic3a36)
Correcciones de errores
ViewModel.getCloseableahora controla las claves duplicadas: si elkeyya tiene un recursoAutoCloseableasociado, el recurso anterior se reemplazará y cerrará de inmediato. (Ibeb67)- Ahora, el acceso al
viewModelScopede unViewModeltiene protección de subprocesos. (If4766, b/322407038)
Contribución externa
LocalLifecycleOwnerse trasladó de la IU de Compose a lifecycle-runtime-compose para que sus APIs de ayuda basadas en Compose se puedan usar fuera de la IU de Compose. Gracias a Jake Wharton por su contribución. (I6c41b, b/328263448)
Versión 2.8.0-alpha02
21 de febrero de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.0-alpha02. La versión 2.8.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Se agregaron las APIs de
dropUnlessResumedydropUnlessStarted, que te permiten descartar clics o cualquier otro evento que ocurra incluso después de queLifecycleOwnerhaya caído por debajo delLifecycle.Statedeterminado. Por ejemplo, se puede usar con Navigation Compose para evitar controlar eventos de clic después de que ya comenzó una transición a otra pantalla:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }(Icba83, b/317230685)
Conversiones de Kotlin
- Ahora,
ViewModelestá escrito en Kotlin (I16f26, b/214568825). - Las extensiones de Kotlin
lifecycle-viewmodel-ktxahora se trasladaron al módulo de ciclo de vida base. (Id787b, b/274800183) - Las extensiones de Kotlin
lifecycle-runtime-ktxahora se trasladaron al módulo de ciclo de vida base. (Ic3686, b/274800183) - Las extensiones de Kotlin
lifecycle-livedata-core-ktxahora se trasladaron al módulo de ciclo de vida base. (I54a3d, b/274800183)
Compatibilidad con Kotlin Multiplatform
- Las APIs principales de Lifecycle en
Lifecycle,LifecycleOwner,LifecycleObserver,Lifecycle.State,Lifecycle.EventyLifecycleRegistryahora se incluyen en artefactos compatibles con Kotlin Multiplatform. (b/317249252)
Cambios en la API
- Llamar a
LifecycleStartEffectyLifecycleResumeEffectsin una clave ahora es un error, siguiendo la misma convención que la API deDisposableEffectque reflejan estas APIs. (Ib0e0c, b/323518079) - Ahora
ViewModelusaAutoCloseableen lugar deCloseable. Ese es un cambio retrocompatible. (I27f8e, b/214568825) LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)dejó de estar disponible y se reemplazó porLiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)
Contribución externa
- Gracias a Ivan Matkov de Jetbrains por ayudar a migrar Lifecycle a Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)
Versión 2.8.0-alpha01
24 de enero de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.8.0-alpha01. La versión 2.8.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
ViewModelahora admite la adición de objetosCloseablecon unkeyque permite recuperarlos a través degetCloseable(). (I3cf63)
Versión 2.7
Versión 2.7.0
10 de enero de 2024
Lanzamiento de androidx.lifecycle:lifecycle-*:2.7.0. La versión 2.7.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.6.0
TestLifecycleOwnerahora incluye una función de suspensiónsetCurrentState()que garantiza que el cambio de estado y todas las devoluciones de llamada deLifecycleObserverse completen antes de que se muestre. En particular, a diferencia de establecer la propiedadcurrentStatedirectamente, esto no usarunBlocking, por lo que es seguro usarlo dentro de una corrutina, como la que proporcionarunTest.- Las extensiones
LiveDatademapyswitchMapahora reflejan el comportamiento dedistinctUntilChanged: Si elLiveDatatiene unvalueestablecido, se llamará a la funciónmap/switchMapinmediatamente para completar elvaluedelLiveDatadevuelto. Esto garantiza que el valor inicial se establecerá como parte de la primera composición (cuando se use conobserveAsState()), pero no cambia el comportamiento de observación: los valores de las actualizaciones de la fuenteLiveDatasolo se aplicarán una vez que comiences a observar elLiveData. - En esta versión, se corrigió un problema por el que
SavedStateHandleno restablecía correctamente las clasesParcelablepersonalizadas después del cierre y la recreación del proceso. Debido a la pérdida de información de tipo por parte del framework de Android, los arrays de Parcelables personalizados requieren trabajo adicional (crear manualmente un array con tipo del tipo correcto), y la documentación sobreget,getLiveDataygetStateFlowahora menciona específicamente esta limitación. - Se quitaron las reglas de ProGuard keep asociadas con
LifecycleObserver. Esto significa que el código protegido con ProGuard que desee usar APIs a través de la reflexión (por ejemplo, usando la anotación@OnLifecycleEventque ya está obsoleta) deberá proporcionar sus propias reglas de conservación para su caso de uso específico.
Observabilidad de eventos del ciclo de vida
- Como alternativa a usar un
LifecycleEventObserver, ahora puedes observar unFlowdeLifecycle.Eventa través del método de extensiónLifecycle.asFlow(). - Los usuarios de Jetpack Compose ahora pueden usar
LifecycleEventEffectpara ejecutar efectos secundarios de Compose basados enLifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Los usuarios de Jetpack Compose pueden usar
LifecycleStartEffectyLifecycleResumeEffectpara controlar pares de eventos: de iniciado a detenido y de reanudado a pausado, respectivamente. Esta API refleja la que se encuentra enDisposableEffecty es adecuada para los casos en los que el cambio que se realiza cuando el estado sube debe revertirse cuando vuelve a bajar.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
Consulta Cómo ejecutar código en eventos de ciclo de vida para obtener más información.
Observabilidad del estado del ciclo de vida
- El
Lifecycle.Stateactual ahora se puede observar a través de la propiedadLifecycle.currentStateFlow, que devuelve unStateFlowen el que elvaluees elLifecycle.Stateactual. - Los usuarios de Jetpack Compose pueden usar la extensión
Lifecycle.currentStateAsState()para exponer directamenteLifecycle.StatecomoStatede Compose. Esto equivale alifecycle.currentStateFlow.collectAsState()(y es una alternativa más corta).
Consulta Cómo recopilar el estado del ciclo de vida con flujos para obtener más información.
Versión 2.7.0-rc02
13 de diciembre de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.7.0-rc02. La versión 2.7.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que
SavedStateHandleno restablecía correctamente las clasesParcelablepersonalizadas después del cierre y la recreación del proceso. Debido a la pérdida de información de tipo por parte del framework de Android, los arrays de Parcelables personalizados requieren trabajo adicional (crear manualmente un array con tipo del tipo correcto), y la documentación sobreget,getLiveDataygetStateFlowahora menciona específicamente esta limitación. (I0b55a)
Versión 2.7.0-rc01
15 de noviembre de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.7.0-rc01. La versión 2.7.0-rc01 contiene estas confirmaciones.
Correcciones de errores
LifecycleStartEffectyLifecycleResumeEffectahora descartan y recrean correctamente el bloque de efecto si se cambiaLifecycleOwner. (Ia25c6)
Versión 2.7.0-beta01
1 de noviembre de 2023
Se lanzó androidx.lifecycle:lifecycle-*:2.7.0-beta01 sin cambios. La versión 2.7.0-beta01 contiene estas confirmaciones.
- Se actualizó la versión beta, pero no se realizaron cambios importantes en esta versión.
Versión 2.7.0-alpha03
18 de octubre de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.7.0-alpha03. La versión 2.7.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
lifecycle-runtime-testingahora contiene una nueva verificación de lint para evitar establecer elLifecycle.StatedelTestLifecycleOwnercon el campocurrentStatecuando se está dentro de una corrutina. La verificación de Lint ahora sugiere elsetCurrentStatede suspensión que permite configurar elLifecycle.Statesin bloqueo. (Icf728, b/297880630)
Correcciones de errores
- Se corrigió un problema con
LiveData.switchMappor el que devolver la misma instancia deLiveDataen la llamada inicial y en una llamada posterior impedía que la instancia deLiveDatase agregara como fuente. (Ibedcba7)
Versión 2.7.0-alpha02
6 de septiembre de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.7.0-alpha02. La versión 2.7.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
TestLifecycleOwnerahora incluye la función de suspensiónsetCurrentState()para brindarles a los usuarios la opción de usarTestLifecycleOwnerdesde una corrutina, como la que proporcionarunTest. (I329de, b/259344129)
Cambios en la API
- Todos los archivos de los módulos
lifecycle-livedata-ktxse movieron al módulo principallifecycle-livedata. (I10c6f, b/274800183)
Cambios en el comportamiento
- Las extensiones
LiveData.map()yLiveData.switchMap()ahora establecen elvaluedelLiveDatadevuelto si elLiveDataanterior tenía un valor establecido, lo que garantiza que el uso del LiveData resultante en Jetpack Compose tenga el estado correcto en la composición inicial. (I91d2b, b/269479952) - El método
addCloseable()deViewModelahora cierra inmediatamente el objetoCloseablesiViewModelya recibió una llamada aonCleared(). (I4712e, b/280294730)
Correcciones de errores
- De Lifecycle
2.6.2: Se corrigió un problema por el queSavedStateHandleno se restablecía correctamente después del cierre del proceso si se restablecía el estado, se llamaba asave()sin guardar realmente el estado en el elementoSavedStateRegistryprincipal y, luego, se restablecía el estado nuevamente. Esto corrige la interacción entrerememberSaveableyNavHostde Navigation Compose. (aosp/2729289)
Versión 2.7.0-alpha01
26 de julio de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.7.0-alpha01. La versión 2.7.0-alpha01 contiene estas confirmaciones.
Cambios en la API
Lifecycle.Stateahora se puede observar con Compose a través deLifecycle.currentStateFlow, que devuelve unStateFlowen el quevaluees elLifecycle.Stateactual. (Ib212d, b/209684871)- Ahora, los
Lifecycle.Events se pueden observar como unFlowconLifecycle.asFlow().(If2c0f, b/176311030). - Se agregó la API de
LifecycleResumeEffectpara ejecutarSideEffectde Compose basados en devoluciones de llamadas de eventos deLifecycle.Event.ON_RESUMEyLifecycle.Event.ON_PAUSE. (I60386, b/235529345) - Se agregó la API de
LifecycleStartEffectpara ejecutarSideEffectde Compose según las devoluciones de llamadas de eventosLifecycle.Event.ON_STARTyLifecycle.Event.ON_STOP. (I5a8d1, b/235529345) - Se agregó la API de
LifecycleEventEffectpara ejecutarSideEffectde Compose basados enLifecycle.Event. (Ic9794, b/235529345) - Se agregó la extensión
Lifecycle.collectAsState()para exponer directamenteLifecycle.StatecomoStatede Compose. Esto equivale alifecycle.currentStateFlow.collectAsState()(y es una alternativa más corta). (I11015, b/235529345)
Correcciones de errores
- La extensión
LiveData.distinctUntilChanged()ahora establece elvaluedelLiveDatadevuelto si elLiveDataanterior tenía un valor establecido. Esto no cambia el comportamiento de la observación: los valores actualizados de la fuenteLiveDatasolo se aplicarán una vez que comiences a observar elLiveDataque se muestra desdedistinctUntilChanged(). (Ib482f) - Se quitaron las reglas de ProGuard keep asociadas con
LifecycleObserver. Esto significa que el código protegido con ProGuard que desee usar APIs a través de la reflexión deberá proporcionar sus propias reglas de conservación para su caso de uso específico. (Ia12fd)
Versión 2.6
Versión 2.6.2
6 de septiembre de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.6.2. La versión 2.6.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que
SavedStateHandleno se restablecía correctamente después del cierre del proceso si se restablecía el estado, se llamaba asave()sin guardar realmente el estado en el elementoSavedStateRegistryprincipal y, luego, se restablecía el estado nuevamente. Esto corrige la interacción entrerememberSaveableyNavHostde Navigation Compose. (aosp/2729289)
Versión 2.6.1
22 de marzo de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.6.1. La versión 2.6.1 contiene estas confirmaciones.
Actualizaciones de dependencias
lifecycle-viewmodel-savedstateahora depende de SavedState1.2.1. (cd7251)- Lifecycle ahora depende de ProfileInstaller
1.3.0. (f9d30b)
Versión 2.6.0
8 de marzo de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.6.0. La versión 2.6.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.5.0
LiveDataahora incluye una nueva propiedadisInitializedque indica si se configuró un valor explícito en el elementoLiveData, lo que te permite distinguir entre unliveData.valueque muestranullporque nunca se estableció un valor o un valornullexplícitoMediatorLiveDataahora incluye un constructor para establecer un valor inicial- Se agregó una nueva extensión en
StateFlowyFlowdecollectAsStateWithLifecycle()que recopila datos de flujos y representa su último valor como estado de Compose de manera optimizada para los ciclos de vida. - Los métodos
Lifecycle.launchWhenXyLifecycle.whenXdejaron de estar disponibles, ya que el uso de un despachador en pausa puede generar desperdicio de recursos en algunos casos. Se recomienda usarLifecycle.repeatOnLifecyclePara obtener más información sobre la suspensión única del trabajo, consulta esta explicación sobre por qué esto es inherentemente inseguro. - Conversión a Kotlin: Se convirtió una gran cantidad de clases de Lifecycle a Kotlin. Todas las clases convertidas conservan su compatibilidad binaria con versiones anteriores. Las siguientes clases tienen cambios incompatibles con la fuente para las clases escritas en Kotlin:
ViewTreeLifecycleOwner,LiveDataReactiveStreams,HasDefaultViewModelProviderFactory,ViewTreeViewModelStoreOwner,Transformations,ViewModelStoreOwneryLifecycleOwner.
En la siguiente tabla, se proporcionan las conversiones de la fuente para la nueva versión del ciclo de vida.
| 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 |
- La nulabilidad del método
onChangedde unObservercreado en Kotlin ahora coincide con la nulabilidad del tipo genérico. Si deseas queObserver.onChanged()acepte un tipo anulable, debes crear una instancia deObservercon un tipo anulable. - Estas clases también se convirtieron a Kotlin, pero siguen siendo compatibles con el código fuente:
DefaultLifecycleObserver,LifecycleEventObserver,Lifecycle,LifecycleRegistry,LifecycleObserver,ViewModelStore,AndroidViewModel,AbstractSavedStateViewModelFactory,LifecycleService,ServiceLifecycleDispatcheryProcessLifecycleOwner
Versión 2.6.0-rc01
22 de febrero de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.6.0-rc01. La versión 2.6.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- La extensión
LiveData.distinctUntilChanged()ahora establece elvaluedelLiveDatadevuelto si elLiveDataanterior tenía un valor establecido. Esto no cambia el comportamiento de la observación: los valores actualizados de la fuenteLiveDatasolo se aplicarán una vez que comiences a observar elLiveDataque se muestra desdedistinctUntilChanged(). (Ib482f)
Versión 2.6.0-beta01
8 de febrero de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.6.0-beta01. La versión 2.6.0-beta01 contiene estas confirmaciones.
Conversiones de Kotlin
LifecycleOwnerahora está escrito en Kotlin. Este es un cambio incompatible de la fuente para las clases escritas en Kotlin; ahora deben anular la propiedadlifecycleen lugar de implementar la funcióngetLifecycle()anterior (I75b4b, b/240298691).ViewModelStoreOwnerahora está disponible en Kotlin. Este es un cambio incompatible de la fuente para las clases escritas en Kotlin; ahora deben anular la propiedadviewModelStoreen lugar de implementar la funcióngetViewModelStore()anterior (I86409, b/240298691).- La extensión de Kotlin en
LifecycleOwnerque proporciona el campolifecycleScopese movió al artefactolifecycle-commondesdelifecycle-runtime-ktx(I41d78, b/240298691). - La extensión de Kotlin en
Lifecycleque proporciona el campocoroutineScopese movió al artefactolifecycle-commondesdelifecycle-runtime-ktx(Iabb91, b/240298691).
Versión 2.6.0-alpha05
25 de enero de 2023
Se lanzó androidx.lifecycle:lifecycle-*:2.6.0-alpha05. La versión 2.6.0-alpha05 contiene estas confirmaciones.
Conversiones de Kotlin
Transformationsahora está escrito en Kotlin. Este es un cambio incompatible de la fuente para esas clases escritas en Kotlin que usaban directamente sintaxis, comoTransformations.map. El código de Kotlin ahora debe usar la sintaxis del método de extensión de Kotlin que antes solo estaba disponible cuando se usabalifecycle-livedata-ktx. Cuando se usa el lenguaje de programación Java, las versiones de estos métodos que toman un métodoandroidx.arch.core.util.Functiondejan de estar disponibles y se reemplazan por las versiones que tomanFunction1de Kotlin. Este cambio mantiene la compatibilidad binaria (I8e14f).ViewTreeViewModelStoreOwnerahora está escrito en Kotlin. Este es un cambio incompatible de la fuente para esas clases escritas en Kotlin. Ahora, debes importar y usar directamente los métodos de extensión de Kotlin enViewdeandroidx.lifecycle.setViewTreeViewModelStoreOwneryandroidx.lifecycle.findViewTreeViewModelStoreOwnerpara establecer y encontrar un propietario que se haya configurado con anterioridad. Esto es compatible a nivel binario y de la fuente para implementaciones escritas en el lenguaje de programación Java (Ia06d8, Ib22d8, b/240298691).- La interfaz
HasDefaultViewModelProviderFactoryahora está escrita en Kotlin. Este es un cambio incompatible de la fuente para las clases escritas en Kotlin; ahora deben anular las propiedadesdefaultViewModelProviderFactoryydefaultViewModelCreationExtrasen lugar de implementar las funciones correspondientes anteriores (Iaed9c, b/240298691). Observerahora está escrito en Kotlin. Su métodoonChanged()ahora usa el nombrevaluepara su parámetro (Iffef2, I4995e, b/240298691).AndroidViewModel,AbstractSavedStateViewModelFactory,LifecycleService,ServiceLifecycleDispatcheryProcessLifecycleOwnerahora están escritos en Kotlin. (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691).
Versión 2.6.0-alpha04
11 de enero de 2023
Lanzamiento de androidx.lifecycle:lifecycle-*:2.6.0-alpha04. La versión 2.6.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
LiveDataahora incluye una nueva propiedadisInitializedque indica si se configuró un valor explícito en el elementoLiveData, lo que te permite distinguir entre unliveData.valueque muestranullporque nunca se estableció un valor o un valornullexplícito (Ibd018).
Cambios en la API
- Las APIs de
collectAsStateWithLifecycle()delifecycle-runtime-composeya no se encuentran en estado experimental (I09d42, b/258835424). - Los métodos
Lifecycle.launchWhenXyLifecycle.whenXdejaron de estar disponibles, ya que el uso de un despachador en pausa puede generar desperdicio de recursos en algunos casos. Se recomienda usarLifecycle.repeatOnLifecycle(Iafc54, b/248302832).
Conversiones de Kotlin
ViewTreeLifecycleOwnerahora está escrito en Kotlin. Este es un cambio incompatible de la fuente para esas clases escritas en Kotlin. Ahora debes importar y usar directamente los métodos de extensión de Kotlin enViewdeandroidx.lifecycle.setViewTreeLifecycleOwneryandroidx.lifecycle.findViewTreeLifecycleOwnerpara establecer y encontrar un propietario que se haya configurado con anterioridad. Esto reemplaza la extensión de Kotlin anterior enlifecycle-runtime-ktx. Esto es compatible a nivel binario y de la fuente para implementaciones escritas en el lenguaje de programación Java (I8a77a, I5234e, b/240298691).LiveDataReactiveStreamsahora está escrito en Kotlin. Las extensiones de Kotlin que se encontraban enlifecycle-reactivestreams-ktxse trasladaron al módulolifecycle-reactivestreamsy se convirtieron en la plataforma principal del código escrito en Kotlin. Este es un cambio incompatible de la fuente para el código escrito en Kotlin si no usabas las APIs del método de extensión de Kotlin (I2b1b9, I95d22, b/240298691).DefaultLifecycleObserver,LifecycleEventObserver,Lifecycle,LifecycleRegistry,LifecycleObserveryViewModelStoreahora están escritos en Kotlin (Iadffd, I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691).
Correcciones de errores
SavedStateHandleya no falla con unaClassCastExceptioncuando se llama aget()con el tipo de clase incorrecto (I6ae7c).
Versión 2.6.0-alpha03
24 de octubre de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.6.0-alpha03. La versión 2.6.0-alpha03 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema con restricciones entre diferentes módulos de Lifecycle que no funcionaban correctamente (I18d0d, b/249686765).
- Los errores arrojados por
LifecycleRegistry.moveToState()ahora incluyen un mensaje de error más útil que informa a los desarrolladores sobre el componente que causa el error (Idf4b2, b/244910446).
Versión 2.6.0-alpha02
7 de septiembre de 2022
Se lanzó androidx.lifecycle:lifecycle-*:2.6.0-alpha02. La versión 2.6.0-alpha02 contiene estas confirmaciones.
Cambios en la API
MediatorLiveDataahora incluye un constructor para establecer un valor inicial (Ib6cc5 y b/151244085).
Correcciones de errores
- Los artefactos
Lifecycleahora incluyen restricciones que garantizan que todos los artefactos de Lifecycle interdependientes usen la misma versión y actualicen automáticamente otras dependencias cuando se actualice una (b/242871265). FlowLiveData.asFlow()ahora crea uncallbackFlowen lugar de usar su propia implementación deChannelpara garantizar la seguridad del subproceso y la preservación del contexto (I4a8b2 y b/200596935).- La función
asLiveDatadeFlowLiveDataahora conservará el valor inicial de unStateFlowcuando se cree el nuevo objetoLiveData(I3f530 y b/157380488) - A partir de Lifecycle
2.5.1: Las implementaciones personalizadas deAndroidViewModelFactoryahora llaman correctamente a la funcióncreate(modelClass)cuando se usa el constructor con estado conLifecycle2.4+ (I5b315 y b/238011621).
Versión 2.6.0-alpha01
29 de junio de 2022
Se lanzó androidx.lifecycle:lifecycle-*:2.6.0-alpha01. La versión 2.6.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una nueva extensión en
StateFlowyFlowdecollectAsStateWithLifecycle, que recopila datos de flujos y representa su último valor como estado de Compose de manera optimizada para los ciclos de vida. El flujo se recopila y la nueva emisión se establece en el valor del estado cuando el ciclo de vida se encuentra, al menos, en unLifecycle.Statedeterminado. Cuando el ciclo de vida es inferior a eseLifecycle.State, la recopilación de flujos se detiene y el valor del estado no se actualiza (I1856e, b/230557927).
Versión 2.5
Versión 2.5.1
27 de julio de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.5.1. La versión 2.5.1 contiene estas confirmaciones.
Correcciones de errores
- Las implementaciones personalizadas de
AndroidViewModelFactoryahora llaman correctamente a la funcióncreate(modelClass)cuando se usa el constructor con estadoAndroidViewModelFactoryconLifecycle2.4+ (I5b315, b/238011621).
Versión 2.5.0
29 de junio de 2022
Se lanzó androidx.lifecycle:lifecycle-*:2.5.0. La versión 2.5.0 contiene estas confirmaciones.
Cambios importantes desde 2.4.0
SavedStateHandleahora ofrece una API degetStateFlow()que muestra un elemento KotlinStateFlowpara supervisar los cambios de valores como alternativa al uso deLiveData.ViewModel CreationExtras: cuando escribes un
ViewModelProvider.Factorypersonalizado, ya no es necesario extenderAndroidViewModelFactoryoAbstractSavedStateViewModelFactorypara obtener acceso aApplicationoSavedStateHandle, respectivamente. En cambio, estos campos se proporcionan a todas las subclases deViewModelProvider.FactorycomoCreationExtrasmediante la nueva sobrecarga decreate:create(Class<T>, CreationExtras). Tu actividad o fragmento proporcionan automáticamente estos extras cuando usan Activity1.5.0y Fragment1.5.0, respectivamente.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-viewmodelahora proporciona unviewModelFactoryde DSL de Kotlin que te permite definir tuViewModelProvider.Factoryen términos de uno o más inicializadores de lambda, uno para cada clase deViewModelen particular que admita tu fábrica personalizada, medianteCreationExtrascomo la principal fuente de datos.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-composeahora ofrece una API deviewModel()que toma una fábrica de expresiones lambda para crear una instanciaViewModelsin necesidad de crear unaViewModelProvider.Factorypersonalizada.// 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) }Integración de ahorro de SavedStateHandle: El artefacto
lifecycle-viewmodel-composeahora incluye nuevas APIs experimentales enSavedStateHandle.saveableque permiten el comportamientorememberSaveablerespaldado por elSavedStateHandlede un "ViewModel".class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }Se agregó una API de
addCloseable()y una nueva sobrecarga de constructor que te permiten agregar uno o más objetosCloseableaViewModel, que se cerrará cuandoViewModelse borra sin requerir trabajo manual enonCleared().Por ejemplo, para crear un alcance de corrutina que puedas insertar en un ViewModel, pero controlar mediante pruebas, puedes crear un
CoroutineScopeque implementeCloseable:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }Se puede usar en el constructor
ViewModelmientras se mantiene la misma duración queviewModelScope:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Cambios en el comportamiento
- Si intentas mover
Lifecycle.StatedeINITIALIZEDaDESTROYED, ahora siempre se mostrará unaIllegalStateException, independientemente de queLifecycletenga un observador adjunto. LifecycleRegistryahora borrará a sus observadores cuando alcancen el estadoDESTROYED.
Versión 2.5.0-rc02
15 de junio de 2022
Se lanzó androidx.lifecycle:lifecycle-*:2.5.0-rc02. La versión 2.5.0-rc02 contiene estas confirmaciones.
Correcciones de errores
ViewModelProviderya no fallará cuando se combinen versiones anteriores de dependencias de compileOnly Lifecycle con versiones de 2.5 y posteriores (I81a66, b/230454566).
Versión 2.5.0-rc01
11 de mayo de 2022
Se lanzó androidx.lifecycle:lifecycle-*:2.5.0-rc01. La versión 2.5.0-rc01 contiene estas confirmaciones.
Correcciones de errores
MediatorLiveData.addSource()ahora arroja unaNullPointerExceptioncuando se pasa unanullfuente, en lugar de propagarnullfuente a los observadores (Ibd0fb, b/123085232).
Versión 2.5.0-beta01
20 de abril de 2022
Se lanzó androidx.lifecycle:lifecycle-*:2.5.0-beta01. La versión 2.5.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se agregaron los delegados de propiedad
SavedStateHandle.saveablepara usar nombres de propiedad como claves para el estado persistente enSavedStateHandle(I8bb86, b/225014345).
Correcciones de errores
- Se solucionó un problema por el que, si se anidaba un
NavHostdentro de otroNavHosten una pestaña de navegación inferior que no era la principal, se generaba unIllegalStateExceptioncuando se usaban varias pilas de actividades (I11bd5, b/228865698).
Versión 2.5.0-alpha06
6 de abril de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.5.0-alpha06. La versión 2.5.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una sobrecarga experimental de
MutableStateaSavedStateHandle.saveablepara obtener paridad conrememberSaveable(I38cfe, b/224565154).
Cambios en la API
CreationExtrasahora es abstracto en lugar de sellado (Ib8a7a).
Correcciones de errores
- Se corrigió un error
IllegalStateException: Already attached to lifecycleOwnercausado porSavedStateHandleController(I7ea47, b/215406268).
Versión 2.5.0-alpha05
23 de marzo de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.5.0-alpha05. La versión 2.5.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- El módulo
lifecycle-viewmodel-composeahora proporcionaSavedStateHandleSaver, una API experimental que garantiza que los valores en unSavedStateHandlese integren de forma correcta con el mismo estado de instancia guardado que usarememberSaveable(Ia88b7, b/195689777).
Cambios en la API
- Se solucionó un problema de compatibilidad con Lifecycle 2.3 y versiones posteriores de Lifecycle en Java (I52c8a, b/219545060).
Correcciones de errores
SavedStateViewFactoryahora admite el uso deCreationExtras, incluso cuando se inicializó con unSavedStateRegistryOwner. Si se proporcionan elementos adicionales, se ignoran los argumentos inicializados (I6c43b, b/224844583).
Versión 2.5.0-alpha04
9 de marzo de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.5.0-alpha04. La versión 2.5.0-alpha04 contiene estas confirmaciones.
Cambios en la API
SavedStateHandleahora ofrece una API degetStateFlow()que muestra un elemento KotlinStateFlowpara supervisar los cambios de valores como alternativa al uso deLiveData(Iad3ab, b/178037961).
Versión 2.5.0-alpha03
23 de febrero de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.5.0-alpha03. La versión 2.5.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una API de
addCloseable()y una nueva sobrecarga de constructor que te permiten agregar uno o más objetosCloseableaViewModel, que se cerrará cuandoViewModelse borra sin requerir trabajo manual enonCleared()(I55ea0). lifecycle-viewmodelahora proporciona unInitializerViewModelFactoryque te permite agregar lambda para controlar clasesViewModelparticulares, usandoCreationExtrascomo la fuente de datos principal (If58fc, b/216687549).lifecycle-viewmodel-composeahora ofrece una API deviewModel()que toma una fábrica de expresiones lambda para crear una instanciaViewModelsin necesidad de crear unaViewModelProvider.Factorypersonalizada (I97fbb, b/216688927).
Cambios en la API
- Ahora puedes crear un
ViewModelconCreationExtrasa través delifecycle-viewmodel-compose(I08887, b/216688927).
Cambios en el comportamiento
- Si intentas mover
Lifecycle.StatedeINITIALIZEDaDESTROYED, ahora siempre se mostrará unaIllegalStateException, independientemente de queLifecycletenga un observador adjunto (I7c390, b/177924329). LifecycleRegistryahora borrará a sus observadores cuando alcancen el estadoDESTROYED(I4f8dd, b/142925860).
Versión 2.5.0-alpha02
9 de febrero de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.5.0-alpha02. La versión 2.5.0-alpha02 contiene estas confirmaciones.
Cambios en la API
SavedStateHandleySavedStateViewModelFactoryse convirtieron a Kotlin. Esto mejoró la nulabilidad de los elementos genéricos en ambas clases (Ib6ce2, b/216168263, I9647a, b/177667711).- El parámetro de la función
switchMapdeLiveDataahora puede tener un resultado anulable (I40396, b/132923666). - Las extensiones -ktx de
LiveDataahora tienen anotaciones con@CheckResultpara garantizar que el resultado se use cuando se llama a estas funciones (Ia0f05, b/207325134).
Cambios en el comportamiento
SavedStateHandleahora almacena correctamente el defaultValue cuando no existe un valor para la clave especificada (I1c6ce, b/178510877).
Correcciones de errores
- A partir de Lifecycle
2.4.1: Se actualizólifecycle-processpara que dependa de Startup 1.1.1 a fin de garantizar que las correcciones que evitan queProcessLifecycleInitializerarroje unaStartupExceptionestén disponibles de forma predeterminada (Ib01df, b/216490724). - Ahora se muestra un mensaje de error mejorado cuando las clases
AndroidViewModelpersonalizadas tienen parámetros en el orden incorrecto y tratan de crear unViewModel(I340f7, b/177667711). - Ahora puedes crear un modelo de vista con
CreationExtrassi usasAndroidViewModelFactorysin configurar una aplicación (I6ebef, b/217271656).
Versión 2.5.0-alpha01
26 de enero de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.5.0-alpha01. La versión 2.5.0-alpha01 contiene estas confirmaciones.
CreationExtras de ViewModel
En esta versión, sentamos las bases para la reestructuración de la construcción de ViewModel. En lugar de un conjunto rígido de subclases de ViewModelProvider.Factory que agregan, de forma individual, funcionalidades adicionales (se permite un parámetro de constructor Application mediante AndroidViewModelFactory, lo que permite un parámetro de constructor SavedStateHandle a través de SavedStateViewModelFactory y AbstractSavedStateViewModelFactory, etc.), estamos migrando a un mundo de fábricas sin estado que se basan en un nuevo concepto, CreationExtras (Ia7343, b/188691010, b/188541057).
Con este cambio, ViewModelProvider ya no realiza llamadas directas al método create(Class<T>) anterior de ViewModelProvider.Factory. En cambio, llama a una nueva sobrecarga de create: create(Class<T>, CreationExtras). Esto significa que cualquier implementación directa de la instancia de ViewModelProvider.Factory ahora tiene acceso a cada una de estas instancias de CreationExtras nuevas:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: EstaStringproporciona acceso a la clave personalizada que pasaste aViewModelProvider.get().ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEYproporciona acceso a la claseApplication.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEYproporciona acceso aSavedStateRegistryOwnerque se usa para construir este ViewModel.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEYproporciona acceso aViewModelStoreOwnerque se usa para construir este ViewModel.SavedStateHandleSupport.DEFAULT_ARGS_KEYproporciona acceso alBundlede los argumentos que se deben usar para construir un elementoSavedStateHandle.
Estos elementos adicionales se proporcionan de forma predeterminada cuando se usan los objetos Activity 1.5.0-alpha01, Fragment 1.5.0-alpha01 y Navigation 2.5.0-alpha01. Si usas una versión anterior de esas bibliotecas, tus CreationExtras estarán vacíos. Se reescribieron todas las subclases existentes de ViewModelProvider.Factory para admitir la ruta de creación heredada que usaban las versiones anteriores de esas bibliotecas y la ruta de CreationExtras que se utilizará en el futuro.
Estos CreationExtras te permiten construir un elemento ViewModelProvider.Factory que pasa solo la información que necesitas a cada ViewModel sin depender de una jerarquía estricta de subclases Factory:
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
}
}
Usamos la función de extensión de Kotlin createSavedStateHandle() en CreationExtras desde SavedStateHandleSupport para construir un elemento SavedStateHandle solo para el ViewModel que lo necesita (Ia6654, b/188541057).
Se pueden proporcionar CreationExtras personalizados si se anulan getDefaultViewModelCreationExtras() en tu ComponentActivity o Fragment, de modo que estén disponibles para tu ViewModelProvider.Factory personalizado como una forma de inyección asistida. Estos elementos adicionales estarán disponibles de forma automática para tu Factory personalizada cuando se usen directamente con ViewModelProvider o cuando se usen las extensiones de propiedad de Kotlin by viewModels() y by activityViewModels() (I79f2b, b/207012584, b/207012585 y b/207012490).
Correcciones de errores
- Se corrigió un problema en el que el valor predeterminado proporcionado a un
SavedStateHandlevolvía a aparecer después del cierre del proceso y de su recreación, incluso si se quitaba específicamente deSavedStateHandle. Como consecuencia de esto,SavedStateHandleya no fusionará los valores predeterminados y los valores restablecidos, sino que solo usará los valores restablecidos como fuente de información (I53a4b).
Versión 2.4
Versión 2.4.1
9 de febrero de 2022
Lanzamiento de androidx.lifecycle:lifecycle-*:2.4.1. La versión 2.4.1 contiene estas confirmaciones.
Correcciones de errores
- Portabilidad a versiones anteriores de Lifecycle
2.5.0-alpha01: Se corrigió un problema por el que el valor predeterminado proporcionado a unSavedStateHandlevolvía a aparecer después del cierre del proceso y de su recreación, incluso si se quitaba específicamente deSavedStateHandle. Como consecuencia de esto,SavedStateHandleya no fusionará los valores predeterminados y los valores restablecidos, sino que solo usará los valores restablecidos como fuente de información (I53a4b). lifecycle-processahora depende de Androidx Startup 1.1.1, que corrigió una regresión en la que el uso deProcessLifecycleInitializergeneraba unaStartupException(b/216490724).
Versión 2.4.0
27 de octubre de 2021
Lanzamiento de androidx.lifecycle:lifecycle-*:2.4.0. La versión 2.4.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.3.0
- El objeto
@OnLifecycleEventdejó de estar disponible. En su lugar, se deben usarLifecycleEventObserveroDefaultLifecycleObserver. - Se agregó la biblioteca
androidx.lifecycle:lifecycle-viewmodel-compose. Brinda el elementoviewModel()componible yLocalViewModelStoreOwner.- Cambio rotundo en el código fuente: Se reescribió
ViewModelProvideren Kotlin. El métodoViewModelProvider.Factory.createya no permite elementos genéricos anulables.
- Cambio rotundo en el código fuente: Se reescribió
- Se agregó una nueva API de corrutinas a
androidx.lifecycle:lifecycle-runtime-ktx: Lifecycle.repeatOnLifecycle: Es una API que ejecuta un bloque de código en una corrutina cuando el ciclo de vida se encuentra, al menos, en un estado determinado. El bloque se cancelará y se volverá a iniciar a medida que el ciclo de vida entre al estado de destino y salga de él.Flow.flowWithLifecycle: Es una API que emite valores del flujo ascendente cuando el ciclo de vida se encuentra en, al menos, un estado determinado.DefaultLifecycleObserverse trasladó delifecycle.lifecycle-common-java8alifecycle.lifecycle-common.lifecycle.lifecycle-common-java8ya no proporciona ninguna funcionalidad adicional además delifecycle.lifecycle-common, por lo que se puede reemplazar la dependencia porlifecycle.lifecycle-common.- Se trasladó la API de corrutinas de
lifecycle-viewmodel-ktxal módulolifecycle-viewmodel. lifecycle-processahora usaandroidx.startuppara inicializarProcessLifecycleOwner.Anteriormente, lo hacía
androidx.lifecycle.ProcessLifecycleOwnerInitializer.Si usaste
tools:node="remove", el elementoContentProviderque se usaba en el pasado para inicializar el proceso de ciclo de vida, debes hacer lo siguiente:<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>(O)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Versión 2.4.0-rc01
29 de septiembre de 2021
Se lanzó androidx.lifecycle:lifecycle-*:2.4.0-rc01 sin modificaciones desde Lifecycle 2.4.0-beta01. La versión 2.4.0-rc01 contiene estas confirmaciones.
Versión 2.4.0-beta01
15 de septiembre de 2021
Lanzamiento de androidx.lifecycle:lifecycle-*:2.4.0-beta01. La versión 2.4.0-beta01 contiene estas confirmaciones.
Cambios en la API
- El objeto
@OnLifecycleEventdejó de estar disponible. En su lugar, se deben usarLifecycleEventObserveroDefaultLifecycleObserver. (I5a8fa) - Se movió DefaultLifecycleObserver de
androidx.lifecycle.lifecycle-common-java8aandroidx.lifecycle.lifecycle-common.androidx.lifecycle.lifecycle-common-java8ya no proporciona ninguna funcionalidad adicional además deandroidx.lifecycle.lifecycle-common, por lo que se puede reemplazar la dependencia porandroidx.lifecycle.lifecycle-common. (I021aa) - Se trasladó la API de corrutinas de
lifecycle-viewmodel-ktxal módulolifecycle-viewmodel. (I6d5b2)
Contribución externa
Versión 2.4.0-alpha03
4 de agosto de 2021
Lanzamiento de androidx.lifecycle:lifecycle-*:2.4.0-alpha03. La versión 2.4.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Cambio rotundo en el código fuente: Se reescribió ViewModelProvider en Kotlin.
El método
ViewModelProvider.Factory.createya no permite elementos genéricos anulables (I9b9f6).
Cambios en el comportamiento
Lifecycle.repeatOnLifecycle:blockahora se invoca siempre en serie cuando se repite la ejecución. (Ibab33)
Contribución externa
- Gracias a chao2zhang por corregir los fragmentos de código en la documentación de
repeatOnLifecycle. #205.
Versión 2.4.0-alpha02
16 de junio de 2021
Lanzamiento de androidx.lifecycle:lifecycle-*:2.4.0-alpha02. La versión 2.4.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una nueva verificación de lint
RepeatOnLifecycleWrongUsagealifecycle-runtime-ktxque detecta cuandorepeateOnLifecyclese usa incorrectamente enonStart()oonResume(). (706078, b/187887400)
Cambios en la API
- Se quitó la API
LifecycleOwner.addRepeatingJobpara fomentar el uso deLifecycle.repeatOnLifecycle, que respeta la simultaneidad estructurada y es más fácil de entender. (I4a3a8) ProcessLifecycleInitializerahora es público para que otrosandroidx.startup.Initializerpuedan usarlo como dependencia. (I94c31)
Correcciones de errores
- Se corrigió un problema con la verificación de lint
NullSafeMutableLiveDatapor el que el campo tenía modificadores. (#147, b/183696616) - Se corrigió otro error relacionado con la verificación de lint
NullSafeMutableLiveDatapor el que se usaban elementos genéricos. (#161, b/184830263)
Contribución externa
- Gracias maxsvv por mejorar la verificación de lint
NullSafeMutableLiveData. (#147, b/183696616) - Gracias kozaxiina por mejorar la verificación de lint
NullSafeMutableLiveData. (#161, b/184830263)
Versión 2.4.0-alpha01
24 de marzo de 2021
Lanzamiento de androidx.lifecycle:lifecycle-*:2.4.0-alpha01. La versión 2.4.0-alpha01 contiene estas confirmaciones.
Cambios en el comportamiento
lifecycle-processahora usaandroidx.startuppara inicializarProcessLifecycleOwner.Anteriormente, lo hacía
androidx.lifecycle.ProcessLifecycleOwnerInitializer.Si usaste
tools:node="remove", el elementoContentProviderque se usaba en el pasado para inicializar el proceso de ciclo de vida, debes hacer lo siguiente:<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>(O)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Cambios en la API
- Se agregó una API de
Flow.flowWithLifecycleque emite valores del flujo ascendente cuando el ciclo de vida se encuentra en, al menos, un estado determinado usando la API deLifecycle.repeatOnLifecycle. Esta es una alternativa a la nueva API deLifecycleOwner.addRepeatinJob. (I0f4cd)
Correcciones de errores
- A partir del Lifecycle versión 2.3.1: La regla de lint de
NonNullableMutableLiveDataahora puede diferenciar correctamente entre las variables de campo y las diferentes nulabilidades. (b/169249668)
Lifecycle Viewmodel Compose versión 1.0.0
Versión 1.0.0-alpha07
16 de junio de 2021
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.
Cambios rotundos en la API
- Ahora
viewModel()toma unViewModelStoreOwneropcional, lo que facilita el trabajo con propietarios que no seanLocalViewModelStoreOwner. Por ejemplo, ahora puedes usarviewModel(navBackStackEntry)para recuperar un ViewModel asociado con un gráfico de navegación en particular (I2628d, b/188693123)
Versión 1.0.0-alpha06
2 de junio de 2021
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.
Se actualizó para ser compatible con la versión 1.0.0-beta08 de Compose.
Versión 1.0.0-alpha05
18 de mayo de 2021
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Se actualizó para que sea compatible con la versión
1.0.0-beta07de Compose.
Correcciones de errores
- Los archivos AndroidManifest de ui-test-manifest y ui-tooling-data ahora son compatibles con Android 12 (I6f9de, b/184718994).
Versión 1.0.0-alpha04
7 de abril de 2021
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.
Cambios de dependencia
- Esta versión permite que
androidx.hilt:hilt-navigation-composeyandroidx.navigation:navigation-composesincronicen las dependencias enandroidx.compose.compiler:compiler:1.0.0-beta04yandroidx.compose.runtime:runtime:1.0.0-beta04. Se requiere que coincidan el compilador y el tiempo de ejecución para 1.0.0.
Versión 1.0.0-alpha03
10 de marzo de 2021
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.
Cambios en la API
LocalViewModelStoreOwner.currentahora muestra un objetoViewModelStoreOwneranulable para determinar mejor si unViewModelStoreOwnerestá disponible en la composición actual. Las API que requieren unViewModelStoreOwner, comoviewModel()yNavHost, aún generan una excepción si no se establece unViewModelStoreOwner. (Idf39a)
Lifecycle-Viewmodel-Compose versión 1.0.0-alpha02
24 de febrero de 2021
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Cambios en la API
LocalViewModelStoreOwnerahora tiene una funciónprovidesque se puede usar conCompositionLocalProvidery reemplaza la APIasProvidableCompositionLocal(). (I45d24)
Lifecycle-Viewmodel-Compose versión 1.0.0-alpha01
10 de febrero de 2021
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01. La versión 1.0.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- El elemento componible
viewModel()yLocalViewModelStoreOwnerse movieron deandroidx.compose.ui.viewinteropa este artefacto en el paqueteandroidx.lifecycle.viewmodel.compose(I7a374)
Versión 2.3.1
Lifecycle versión 2.3.1
24 de marzo de 2021
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.1. La versión 2.3.1 contiene estas confirmaciones.
Correcciones de errores
- La regla de lint de
NonNullableMutableLiveDataahora puede diferenciar correctamente entre las variables de campo y las diferentes nulabilidades. (b/169249668)
Versión 2.3.0
Versión 2.3.0
10 de febrero de 2021
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0. La versión 2.3.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.2.0
- Compatibilidad de
SavedStateHandlepara clases no parcelables:SavedStateHandleahora admite la serialización diferida, ya que te permite llamar asetSavedStateProvider()para una clave determinada, lo que proporciona unSavedStateProviderque devolverá la llamada asaveState()cuando se le solicite aSavedStateHandleguardar su estado. Consulta Cómo guardar clases no parcelables. - Aplicación del comportamiento de Lifecycle:
- El elemento LifecycleRegistry ahora aplica el objeto
DESTROYEDcomo un estado terminal. - El objeto
LifecycleRegistryahora verifica que se llame a sus métodos en el subproceso principal. Siempre fue un requisito para los ciclos de vida de las actividades, los fragmentos, etc. Agregar observadores de subprocesos que no eran principales generaba dificultades al momento de detectar fallas durante el tiempo de ejecución. En el caso de los objetosLifecycleRegistryque pertenecen a tus propios componentes, puedes optar por no participar explícitamente de las comprobaciones mediante el elementoLifecycleRegistry.createUnsafe(...), pero debes asegurarte de que exista una sincronización apropiada cuando se acceda a este objetoLifecycleRegistrydesde diferentes subprocesos.
- El elemento LifecycleRegistry ahora aplica el objeto
- Ayudantes State y Event de Lifecycle: Se agregaron métodos auxiliares estáticos de
downFrom(State),downTo(State),upFrom(State)yupTo(State)al objetoLifecycle.Eventpara generar el elementoEventen función del parámetroStatey una dirección de transición. Se agregó el métodogetTargetState()que proporciona el elementoStateal que el objeto Lifecycle pasará directamente después del parámetroEvent. withStateAtLeast: Se agregaron las API deLifecycle.withStateAtLeastque esperan un estado de ciclo de vida y ejecutan un bloque de código sin suspensión de forma síncrona en el punto de cambio de estado, y se reanudan con el resultado. Esas API difieren de los métodoswhen*existentes, ya que no permiten ejecutar el código de suspensión ni emplean un despachador personalizado. (aosp/1326081)- API de
ViewTree: Una nueva API deViewTreeLifecycleOwner.get(View)yViewTreeViewModelStoreOwner.get(View)te permite recuperar elLifecycleOwnercontenedor yViewModelStoreOwner, respectivamente, en una determinada instancia deView. Debes actualizar a Activity1.2.0y Fragment1.3.0, y a AppCompat 1.3.0-alpha01 o versiones posteriores para que se realice correctamente la propagación. Las extensiones de KotlinfindViewTreeLifecycleOwneryfindViewTreeViewModelStoreOwnerestán disponibles enlifecycle-runtime-ktxylifecycle-viewmodel-ktx, respectivamente. - Baja de la extensión
LiveData.observe()de Kotlin: La extensiónLiveData.observe()de Kotlin necesaria para usar la sintaxis lambda dejó de estar disponible, ya que no es necesaria cuando se usa Kotlin 1.4.
Versión 2.3.0-rc01
16 de diciembre de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-rc01. La versión 2.3.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- El método
keys()deSavedStateHandleahora es coherente antes y después de que se guarda el estado. También incluye las claves usadas anteriormente consetSavedStateProvider(), además de las claves que se usan conset()ygetLiveData(). (aosp/1517919, b/174713653)
Contribución externa
- Las API para suspender las corrutinas optimizadas para Lifecycle ahora administran mejor las llamadas a
yield(). Gracias, Nicklas Ansman Giertz. (aosp/1430830, b/168777346)
Versión 2.3.0-beta01
1 de octubre de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-beta01. La versión 2.3.0-beta01 contiene estas confirmaciones.
Cambios en la API
- La extensión
LiveData.observe()de Kotlin necesaria para usar la sintaxis lambda dejó de estar disponible, ya que no es necesaria cuando se usa Kotlin 1.4. (I40d3f)
Correcciones de errores
- Actualiza AndroidX para usar Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Cambios en la documentación
- Se actualizaron el compilador
liveDatay los documentosasLiveData()para incluir detalles sobre el cambio de los valores de tiempo de espera proporcionados. (aosp/1122324)
Versión 2.3.0-alpha07
19 de agosto de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-alpha07. La versión 2.3.0-alpha07 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla en la comprobación de lint
NullSafeMutableLiveData. (aosp/1395367)
Versión 2.3.0-alpha06
22 de julio de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-alpha06. La versión 2.3.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- Se agregaron métodos auxiliares estáticos de
downFrom(State),downTo(State),upFrom(State),upTo(State)al objetoLifecycle.Eventpara generar el elementoEventen función del parámetroStatey una dirección de transición. Se agregó el métodogetTargetState()que proporciona el elementoStateal que el objeto Lifecycle pasará directamente después del parámetroEvent. (I00887) - Se agregaron las API de
Lifecycle.withStateAtLeastque esperan un estado de ciclo de vida y ejecutan un bloque de código sin suspensión de forma síncrona en el punto de cambio de estado, y se reanudan con el resultado. Estas API difieren de los métodoswhen*existentes, ya que no permiten ejecutar el código de suspensión ni emplean un despachador personalizado. (aosp/1326081)
Cambios en el comportamiento
- El elemento LifecycleRegistry ahora aplica el objeto
DESTROYEDcomo un estado terminal. (I00887) - El objeto
LifecycleRegistryahora verifica que se llame a sus métodos en el subproceso principal. Siempre fue un requisito para los ciclos de vida de las actividades, los fragmentos, etc. Agregar observadores de subprocesos que no eran principales generaba dificultades al momento de detectar fallas durante el tiempo de ejecución. En el caso de los objetosLifecycleRegistryque pertenecen a tus propios componentes, puedes optar por no participar explícitamente de las comprobaciones mediante el elementoLifecycleRegistry.createUnsafe(...), pero debes asegurarte de que exista una sincronización apropiada cuando se acceda a este objetoLifecycleRegistrydesde diferentes subprocesos. (Ie7280, b/137392809)
Correcciones de errores
- Se corrigió una falla en
NullSafeMutableLiveData. (b/159987480) - Se corrigió un objeto
ObsoleteLintCustomCheckpara las comprobaciones de Lint agrupadas con el elementolifecycle-livedata-core-ktx(y, específicamente, el objetoNullSafeMutableLiveData). (b/158699265)
Versión 2.3.0-alpha05
24 de junio de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-alpha05. La versión 2.3.0-alpha05 contiene estas confirmaciones.
Correcciones de errores
LiveDataahora controla mejor los casos de reentrantes y evita las llamadas duplicadas aonActive()oonInactive(). (b/157840298)- Se solucionó un problema en el que las verificaciones de Lint no se ejecutaban en Android Studio 4.1 Canary 6 o versiones posteriores. (aosp/1331903)
Versión 2.3.0-alpha04
10 de junio de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-alpha04. La versión 2.3.0-alpha04 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla en la comprobación de lint
NonNullableMutableLiveData. (b/157294666) - La comprobación de lint
NonNullableMutableLiveDataahora abarca muchos más casos en los que se estableció un valornullen unMutableLiveDatacon un parámetro de tipo no nulo. (b/156002218)
Versión 2.3.0-alpha03
20 de mayo de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-alpha03. La versión 2.3.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
SavedStateHandleahora admite la serialización diferida, ya que te permite llamar asetSavedStateProvider()para una clave determinada, lo que proporciona unSavedStateProviderque devolverá la llamada asaveState()cuando se le solicite aSavedStateHandleguardar su estado. (b/155106862)- Una nueva API de
ViewTreeViewModelStoreOwner.get(View)te permite recuperar elViewModelStoreOwnercontenedor dado que tiene una instancia deView. Debes actualizar a Activity1.2.0-alpha05, Fragment1.3.0-alpha05y AppCompat1.3.0-alpha01para completarlo correctamente. Se agregó una extensiónfindViewModelStoreOwner()de Kotlin alifecycle-viewmodel-ktx. (aosp/1295522)
Correcciones de errores
- Se corrigió un problema que impedía publicar las comprobaciones de lint
MutableLiveDatalanzadas en Lifecycle2.3.0-alpha01junto con el artefactolifecycle-livedata-core-ktx. (b/155323109)
Versión 2.3.0-alpha02
29 de abril de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-alpha02. La versión 2.3.0-alpha02 contiene estas confirmaciones.
Cambios en la API
SavedStateViewModelFactoryahora te permite pasar unApplicationnulo a su constructor para mejorar los casos en los que uno no está disponible y no se necesita compatibilidad conAndroidViewModel. (aosp/1285740)
Correcciones de errores
- Se mejoró el rendimiento de inicio en frío al evitar errores de verificación de clase en la API 28 y versiones anteriores. (aosp/1282118)
Versión 2.3.0-alpha01
4 de marzo de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.3.0-alpha01. La versión 2.3.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Una nueva API de
ViewTreeLifecycleOwner.get(View)te permite recuperar elLifecycleOwnercontenedor dado que tiene una instancia deView. Debes actualizar a Activity1.2.0-alpha01y Fragment1.3.0-alpha01para completarlo correctamente. Hay una extensión de Kotlin defindViewTreeLifecycleOwnerdisponible enlifecycle-runtime-ktx. (aosp/1182361, aosp/1182956) - Se agregó una nueva verificación de Lint que te avisa al establecer un valor
nullen unMutableLiveDataque se definió en Kotlin como no nulo. Esta función está disponible al usar los artefactoslivedata-core-ktxolivedata-ktx. (aosp/1154723, aosp/1159092) - Hay un nuevo artefacto
lifecycle-runtime-testingdisponible que proporciona unTestLifecycleOwnerque implementaLifecycleOwnery proporciona unLifecyclemutable seguro para subprocesos. (aosp/1242438)
Correcciones de errores
- El artefacto
lifecycle-runtimeahora tiene un nombre de paquete único. (aosp/1187196)
Versión 2.2.0
ViewModel-SavedState versión 2.2.0
5 de febrero de 2020
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0. La versión 2.2.0 contiene estas confirmaciones.
Lifecycle ViewModel SavedState ahora comparte la misma versión que otros artefactos del Lifecycle. El comportamiento de 2.2.0 es idéntico al comportamiento de 1.0.0.
Versión 2.2.0
22 de enero de 2020
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0. La versión 2.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.1.0
- Integración de la corrutina de Lifecycle: El nuevo artefacto
lifecycle-runtime-ktxagrega integración entre las corrutinas de Lifecycle y Kotlin. También se expandiólifecycle-livedata-ktxpara aprovechar las corrutinas. Consulta Cómo usar corrutinas de Kotlin con los componentes de la arquitectura para obtener más detalles. - Se dio de baja
ViewModelProviders.of():ViewModelProviders.of()dejó de estar disponible. Puedes pasar un elementoFragmentoFragmentActivityal nuevo constructorViewModelProvider(ViewModelStoreOwner)para lograr la misma funcionalidad cuando utilizas Fragment1.2.0 - Se dio de baja el artefacto
lifecycle-extensions: Dado queViewModelProviders.of()dejó de estar disponible, esta versión marca la baja de la última API enlifecycle-extensionsy este artefacto se debería considerar obsoleto en su totalidad. Te recomendamos depender de los artefactos específicos de Lifecycle que necesites (por ejemplo,lifecycle-servicesi usasLifecycleService, ylifecycle-processsi usasProcessLifecycleOwner) en lugar de utilizarlifecycle-extensions, ya que no habrá una versión2.3.0futura delifecycle-extensions. - Procesador de anotaciones graduales de Gradle: El procesador de anotaciones de Lifecycle es gradual de forma predeterminada.
Si tu app está escrita en el lenguaje de programación de Java 8, puedes usar
DefautLifecycleObserver. Si está escrita en Java 7, puedes usarLifecycleEventObserver.
Versión 2.2.0-rc03
4 de diciembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0-rc03. La versión 2.2.0-rc03 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error que se producía cuando un objeto
ViewModelficticio se almacenaba enViewModelStorey se lo solicitaba más tarde con la configuración de fábrica predeterminada. - Corrige un uso de
Dispatchers.Main.immediateenlaunchWhenCreatedy métodos similares para que se los llame de forma síncrona durante el evento de ciclo de vida correspondiente. (aosp/1156203)
Contribuciones externas
- Gracias a Anders Järleberg por contribuir con la corrección. (aosp/1156203)
- Gracias a Vsevolod Tolstopyatov de Jetbrains por revisar una implementación de ejecución intercalada.
Cambios de dependencia
- Las extensiones de Lifecycle ahora dependen de Fragment
1.2.0-rc03.
Versión 2.2.0-rc02
7 de noviembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0-rc02. La versión 2.2.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error en la configuración de ProGuard de la biblioteca que afectaba a los dispositivos que ejecutaban API 28+ si la API de destino era inferior a 29 (b/142778206).
Versión 2.2.0-rc01
23 de octubre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0-rc01. La versión 2.2.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema en el que
launchWhenCreatedy los métodos relacionados ejecutaban un marco más tarde que el método de ciclo de vida asociado debido al uso deDispatchers.Main, en lugar deDispatchers.Main.immediate(aosp/1145596).
Contribuciones externas
- Gracias a Nicklas Ansman por contribuir con la corrección (aosp/1145596).
Versión 2.2.0-beta01
9 de octubre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0-beta01. La versión 2.2.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una regresión introducida en Lifecycle 2.2.0-alpha05 en el pedido de
ProcessLifecycleOwnery el movimiento deLifecycleOwnerde la actividad de inicio y reanudación en dispositivos Android 10. (aosp/1128132) - Se corrigió una regresión introducida en Lifecycle
2.2.0-alpha05que generaba unaNullPointerExceptional usar la versión2.0.0o2.1.0delifecycle-process. (b/141536990).
Versión 2.2.0-alpha05
18 de septiembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0-alpha05. La versión 2.2.0-alpha05 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una condición de carrera en el compilador de objetos LiveData de corrutina. (b/140249349)
Versión 2.2.0-alpha04
5 de septiembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0-alpha04. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Nuevas funciones
lifecycleScope,whenCreated,whenStarted,whenResumed,viewModelScopey la implementación subyacente deliveDataahora usanDispatchers.Main.immediate, en lugar deDispatchers.Main. (b/139740492).
Contribuciones externas
- Gracias a Nicklas Ansman por contribuir con el cambio a
Dispatchers.Main.immediate. (aosp/1106073).
Versión 2.2.0-alpha03
7 de agosto de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.2.0-alpha03. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Nuevas funciones
- Las implementaciones de
ViewModelStoreOwnerahora tienen la opción de implementarHasDefaultViewModelProviderFactorypara proporcionar un valorViewModelProvider.Factorypredeterminado. Este es el caso de This has been done for Activity1.1.0-alpha02, Fragment1.2.0-alpha02y Navigation2.2.0-alpha01(aosp/1092370, b/135716331).
Cambios en la API
ViewModelProviders.of()dejó de estar disponible. Puedes pasar un elementoFragmentoFragmentActivityal nuevo constructorViewModelProvider(ViewModelStoreOwner)para lograr la misma funcionalidad (aosp/1009889).
Versión 2.2.0-alpha02
2 julio de 2019
Lanzamiento de androidx.lifecycle:*:2.2.0-alpha02. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Cambios en la API
- Se reemplazó
LiveDataScope.initialValueporLiveDataScope.latestValue, que realizará un seguimiento del valor emitido actual del bloqueliveData. - Se agregó una nueva sobrecarga al compilador
liveDataque recibe el parámetrotimeoutcomoDurationde tipo.
Versión 2.2.0-alpha01
7 de mayo de 2019
Lanzamiento de androidx.lifecycle:*:2.2.0-alpha01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Nuevas funciones
- Esta versión cuenta con nuevas funciones que brindan compatibilidad con las corrutinas de Kotlin para Lifecycle y LiveData. Aquí encontrarás documentación detallada sobre estas.
ViewModel-SavedState versión 1.0.0
Versión 1.0.0
22 de enero de 2020
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0. La versión 1.0.0 contiene estas confirmaciones.
Funciones importantes de la versión 1.0.0
- Se agregó una nueva clase SavedStateHandle. Permite que las clases
ViewModelaccedan y contribuyan al estado guardado. Este objeto se puede recibir en el constructor de la claseViewModel, y las fábricas proporcionadas de forma predeterminada por Fragments y AppCompatActivity introduciránSavedStateHandleautomáticamente. - Se agregó AbstractSavedStateViewModelFactory. Te permite crear fábricas personalizadas para la clase
ViewModely proporcionarles acceso aSavedStateHandle.
ViewModel-Savedstate versión 1.0.0-rc03
4 de diciembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03. La versión 1.0.0-rc03 contiene estas confirmaciones.
Cambios de dependencia
- Lifecycle ViewModel SavedState ahora depende de Lifecycle
2.2.0-rc03.
Viewmodel-Savedstate versión 1.0.0-rc02
7 de noviembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02. La versión 1.0.0-rc02 contiene estas confirmaciones.
Cambios de dependencia
- Ahora depende de Lifecycle
2.2.0-rc02.
ViewModel-SavedState versión 1.0.0-rc01
23 de octubre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 sin cambios desde 1.0.0-beta01. La versión 1.0.0-rc01 contiene estas confirmaciones.
ViewModel-Savedstate versión 1.0.0-beta01
9 de octubre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema en el que acceder a SavedState ViewModel por primera vez en
Activity.onActivityResult()generaba unaIllegalStateException. (b/139093676) - Se corrigió una
IllegalStateExceptional usarAbstractSavedStateViewModelFactory. (b/141225984).
ViewModel-SavedState versión 1.0.0-alpha05
18 de septiembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Cambios en la API
SavedStateViewModelFactoryya no extiendeAbstractSavedStateViewModelFactory, ySavedStateHandlese crea solo para las instancias de ViewModels que lo solicitan. (aosp/1113593)
ViewModel-SavedState versión 1.0.0-alpha03
7 de agosto de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Cambios rotundos
lifecycle-viewmodel-savedstateya no depende defragment, y se quitaron los constructoresSavedStateViewModelFactory(Fragment)ySavedStateViewModelFactory(FragmentActivity)relacionados. En cambio,SavedStateViewModelFactoryahora es el objeto de fábrica predeterminado para Activity1.1.0-alpha02, Fragment1.2.0-alpha02y Navigation2.2.0-alpha01. (b/135716331).
ViewModel-SavedState versión 1.0.0-alpha02
2 julio de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Nuevas funciones
- Se agregó la sobrecarga de
SavedStateHandle.getLiveData(), que acepta un valor predeterminado.
Cambios en la API
- El nombre de
SavedStateVMFactorycambió porSavedStateViewModelFactory. - El nombre de
AbstractSavedStateVMFactorycambió porAbstractSavedStateViewModelFactory.
ViewModel-Savedstate versión 1.0.0-alpha01
13 de marzo de 2019
Lanzamiento de androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01. Para obtener el registro completo de confirmaciones para esta versión inicial, consulta este vínculo.
Nuevas funciones
- Ahora,
ViewModelspuede contribuir con SavedState. Para hacerlo, usa la clase predeterminadaSavedStateVMFactory, recientemente introducida, y tu ViewModel debería tener un constructor que reciba el objetoSavedStateHandlecomo parámetro.
Versión 2.1.0
Cambios importantes desde 2.0.0
- Se agregó
LifecycleEventObserverpara los casos en que se necesita una secuencia de eventos de Lifecycle. Es una API pública, en lugar de una claseGenericLifecycleObserveroculta. - Se agregaron extensiones ktx para los métodos
LiveData.observeyTransformations.*. - Se agregó el método
Transformations.distinctUntilChanged, que permite crear un nuevo objeto de LiveData que no emite ningún valor hasta que se cambia el valor de origen deLiveData. - Se agregó compatibilidad con corrutinas en ViewModels gracias a que se agregó la propiedad de extensión
ViewModel.viewModelScope.
Versión 2.1.0
5 de septiembre de 2019
Lanzamiento de androidx.lifecycle:lifecycle-*:2.1.0. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Versión 2.1.0-rc01
2 julio de 2019
Lanzamiento de androidx.lifecycle:*:2.1.0-rc01 sin cambios desde androidx.lifecycle:*:2.1.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Versión 2.1.0-beta01
7 de mayo de 2019
Lanzamiento de androidx.lifecycle:*:2.1.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Nuevas funciones
- Se cambia la versión de Lifecycle a Beta: se estabilizan las API introducidas en las versiones Alfa anteriores, como las funciones de extensión de
liveDatapara transformaciones y observaciones, la inicialización deViewModelcon delegación de propiedades y otras, que no se modificarán.
Versión 2.1.0-alpha04
3 de abril de 2019
Lanzamiento de androidx.lifecycle:*:2.1.0-alpha04. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Cambios en la API
- Cambio rotundo: se cambió la API subyacente detrás de
by viewModels()yby activityViewModels()para admitir directamenteViewModelStore, en lugar de solo unViewModelStoreOwner. (aosp/932932).
Versión 2.1.0-alpha03
13 de marzo de 2019
Lanzamiento de androidx.lifecycle:*:2.1.0-alpha03. Para obtener una lista completa de las confirmaciones incluidas en esta versión, consulta este vínculo.
Cambios en la API
ViewModelProvider.KeyedFactoryse quitó. La segunda interfaz, además deViewModelProvider.Factory, no se ejecutaba correctamente con las nuevas funciones, como delegación de propiedades enby viewmodels {}de Kotlin (aosp/914133).
Versión 2.1.0-alpha02
30 de enero de 2019
Lanzamiento de androidx.lifecycle 2.1.0-alpha02.
Cambios en la API
- Ahora
LifecycleRegistrycontiene un métodosetCurrentState()que reemplaza el métodosetState()obsoleto. (aosp/880715).
Correcciones de errores
- Se corrigió un problema en el que fallaban las instancias simuladas de
ViewModelcuando se borraba el elementoViewModelStoreque las contenía. (b/122273087)
Versión 2.1.0-alpha01
17 de diciembre de 2018
Lanzamiento de androidx.lifecycle 2.1.0-alpha01.
Nuevas funciones
- Se agregó
LifecycleEventObserverpara los casos en que se necesita una secuencia de eventos de Lifecycle. Es una API pública, en lugar de una claseGenericLifecycleObserveroculta. - Se agregaron extensiones ktx para los métodos
LiveData.observeyTransformations.*. - Se agregó el método
Transformations.distinctUntilChanged. Permite crear un nuevo objeto deLiveDataque no emite ningún valor hasta que se cambia el valor de origen de LiveData. - Se agregó la compatibilidad con corrutinas en ViewModels: se agregó la propiedad de extensión
ViewModel.viewModelScope. - Se agregó
ViewModelProvider.KeyedFactory, un valor de fábrica para ViewModels que recibekeyyClassen el métodocreate.
Versión 2.0.0
Versión 2.0.0
21 de septiembre de 2018
Lanzamiento de Lifecycle 2.0.0 con una corrección de errores desde 2.0.0-rc01 en ViewModel.
Correcciones de errores
- Se corrigió un error de ProGuard de ViewModel que quitaba constructores de manera incorrecta b/112230489
Versión 2.0.0-beta01
2 de julio de 2018
Correcciones de errores
- Se corrigió la regla ProGuard de LifecycleObserver solo para mantener implementaciones, y no subinterfaces. b/71389427
- Se corrigieron las reglas ProGuard de ViewModel para permitir la ofuscación y la contracción.
Versiones anteriores a AndroidX
Para las siguientes versiones de Lifecycle anteriores a AndroidX, incluye estas dependencias:
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"
}
Versión 1.1.1
21 de marzo de 2018
Solo un pequeño cambio: se movió android.arch.core.util.Function de arch:runtime a arch:common. De esta manera, es posible usarla sin la dependencia del tiempo de ejecución, p. ej., en paging:common a continuación.
lifecycle:common es una dependencia de lifecycle:runtime, de manera que este cambio no afecta a lifecycle:runtime directamente, sino que solo afecta a los módulos que dependen de manera directa de lifecycle:common, como sucede con Paging.
Versión 1.1.0
22 de enero de 2018
Cambios de empaquetado
Ahora hay dependencias nuevas y mucho más pequeñas disponibles:
android.arch.lifecycle:livedata:1.1.0android.arch.lifecycle:viewmodel:1.1.0
Cambios en la API
- Se quitaron
LifecycleActivityyLifecycleFragment, ya que dejaron de estar disponibles. En su lugar, usaFragmentActivityoAppCompatActivity, o bien asegúrate de queFragmentsea compatible. - Se agregaron anotaciones de
@NonNullaViewModelProvidersyViewModelStores. - El constructor
ViewModelProvidersdejó de estar disponible. Usa sus métodos estáticos directamente. ViewModelProviders.DefaultFactorydejó de estar disponible. UsaViewModelProvider.AndroidViewModelFactory.- Se agregó el método
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)estático para recuperar un valorFactoryestático apto para la creación de instanciasViewModelyAndroidViewModel.