Lifecycle

Los componentes optimizados para ciclos de vida realizan acciones como respuesta a un cambio en el estado del ciclo de vida de otro componente, como actividades o fragmentos. Estos componentes te ayudan a crear un código mejor organizado, y a menudo más liviano, que resulta más fácil de mantener.

En esta tabla, se enumeran todos los artefactos del grupo androidx.lifecycle.

Artefacto Versión estable actual Próxima versión potencial Versión beta Versión alfa
lifecycle-* 2.4.0 - - -
lifecycle-viewmodel-compose 2.4.0 - - -
Esta biblioteca se actualizó por última vez el 27 de octubre de 2021.

Cómo declarar dependencias

Para agregar una dependencia en Lifecycle, debes agregar el repositorio de Maven de Google a tu proyecto. Lee el repositorio 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.4.0"
        def arch_version = "2.1.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"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // 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"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.4.0"
        val arch_version = "2.1.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")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // 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")
    }
    

Java

Groovy

    dependencies {
        def lifecycle_version = "2.4.0"
        def arch_version = "2.1.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"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.4.0"
        val arch_version = "2.1.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")
    }
    

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 en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.

Cómo crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 2.4

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 @OnLifecycleEvent dejó de estar disponible. En su lugar, se debe usar LifecycleEventObserver o DefaultLifecycleObserver.
  • Se agregó la biblioteca androidx.lifecycle:lifecycle-viewmodel-compose. Brinda el elemento viewModel() componible y LocalViewModelStoreOwner.
    • Cambio rotundo en el código fuente: Se reescribió ViewModelProvider en Kotlin. ViewModelProvider.Factory.create method ya no permite elementos genéricos anulables.
  • 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.
  • DefaultLifecycleObserver se trasladó de lifecycle.lifecycle-common-java8 a lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8 ya no proporciona ninguna funcionalidad adicional además de lifecycle.lifecycle-common, por lo que se puede reemplazar la dependencia por lifecycle.lifecycle-common.
  • Se trasladó la API de corrutinas de lifecycle-viewmodel-ktx al módulo lifecycle-viewmodel.
  • lifecycle-process ahora usa androidx.startup para inicializar ProcessLifecycleOwner.

    Anteriormente, lo hacía androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Si usaste tools:node="remove", el elemento ContentProvider que 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

  • Se dio de baja @OnLifecycleEvent. En su lugar, se debe usar LifecycleEventObserver o DefaultLifecycleObserver. (I5a8fa)
  • Se movió DefaultLifecycleObserver de androidx.lifecycle.lifecycle-common-java8 a androidx.lifecycle.lifecycle-common. androidx.lifecycle.lifecycle-common-java8 ya no proporciona ninguna funcionalidad adicional además de androidx.lifecycle.lifecycle-common, por lo que se puede reemplazar la dependencia por androidx.lifecycle.lifecycle-common. (I021aa)
  • Se trasladó la API de corrutinas de lifecycle-viewmodel-ktx al módulo lifecycle-viewmodel. (I6d5b2)

Contribución externa

  • Agradecemos a dmitrilc por corregir un error tipográfico en la documentación de ViewModel. (#221)

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.create ahora permite más elementos genéricos anulables. (I9b9f6)

Cambios en el comportamiento

  • Lifecycle.repeatOnLifecycle: block ahora 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 RepeatOnLifecycleWrongUsage a lifecycle-runtime-ktx que detecta cuando repeateOnLifecycle se usa incorrectamente en onStart() o onResume(). (706078, b/187887400)

Cambios en la API

  • Se quitó la API LifecycleOwner.addRepeatingJob para fomentar el uso de Lifecycle.repeatOnLifecycle, que respeta la simultaneidad estructurada y es más fácil de entender. (I4a3a8)
  • ProcessLifecycleInitializer ahora es público para que otros androidx.startup.Initializer puedan usarlo como dependencia. (I94c31)

Correcciones de errores

  • Se corrigió un problema con la verificación de lint NullSafeMutableLiveData por el que el campo tenía modificadores. (#147, b/183696616)
  • Se corrigió otro error relacionado con la verificación de lint NullSafeMutableLiveData por el que se usaban elementos genéricos. (#161, b/184830263)

Contribución externa

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-process ahora usa androidx.startup para inicializar ProcessLifecycleOwner.

    Anteriormente, lo hacía androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Si usaste tools:node="remove", el elemento ContentProvider que 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.flowWithLifecycle que emite valores del flujo ascendente cuando el ciclo de vida se encuentra en, al menos, un estado determinado usando la API de Lifecycle.repeatOnLifecycle. Esta es una alternativa a la nueva API de LifecycleOwner.addRepeatinJob. (I0f4cd)

Correcciones de errores

  • A partir del Lifecycle versión 2.3.1: La regla de lint de NonNullableMutableLiveData ahora 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 un ViewModelStoreOwner opcional, lo que facilita el trabajo con propietarios que no sean LocalViewModelStoreOwner. Por ejemplo, ahora puedes usar viewModel(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-beta07 de 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-compose y androidx.navigation:navigation-compose sincronicen las dependencias en androidx.compose.compiler:compiler:1.0.0-beta04 y androidx.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.current ahora muestra un objeto ViewModelStoreOwner anulable para determinar mejor si un ViewModelStoreOwner está disponible en la composición actual. Las API que requieren un ViewModelStoreOwner, como viewModel() y NavHost, aún generan una excepción si no se establece un ViewModelStoreOwner. (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

  • LocalViewModelStoreOwner ahora tiene una función provides que se puede usar con CompositionLocalProvider y reemplaza la API asProvidableCompositionLocal(). (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

  • Se movieron los elementos viewModel(), que admiten composición, y LocalViewModelStoreOwner de androidx.compose.ui.viewinterop a este artefacto en el paquete androidx.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 NonNullableMutableLiveData ahora 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 SavedStateHandle para clases no parcelables: SavedStateHandle ahora admite la serialización diferida, ya que te permite llamar a setSavedStateProvider() para una clave determinada, lo que proporciona un SavedStateProvider que devolverá la llamada a saveState() cuando se le solicite a SavedStateHandle guardar su estado. Consulta Cómo guardar clases no parcelables.
  • Aplicación del comportamiento de Lifecycle:
    • El elemento LifecycleRegistry ahora aplica el objeto DESTROYED como un estado terminal.
    • El objeto LifecycleRegistry ahora 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 objetos LifecycleRegistry que pertenecen a tus propios componentes, puedes optar por no participar explícitamente de las comprobaciones mediante el elemento LifecycleRegistry.createUnsafe(...), pero debes asegurarte de que exista una sincronización apropiada cuando se acceda a este objeto LifecycleRegistry desde diferentes subprocesos.
  • Ayudantes State y Event de Lifecycle: Se agregaron métodos auxiliares estáticos de downFrom(State), downTo(State), upFrom(State) y upTo(State) al objeto Lifecycle.Event para generar el elemento Event en función del parámetro State y una dirección de transición. Se agregó el método getTargetState() que proporciona el elemento State al que el objeto Lifecycle pasará directamente después del parámetro Event.
  • withStateAtLeast: Se agregaron las API de Lifecycle.withStateAtLeast que 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étodos when* 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 de ViewTreeLifecycleOwner.get(View) y ViewTreeViewModelStoreOwner.get(View) te permite recuperar el LifecycleOwner contenedor y ViewModelStoreOwner, respectivamente, en una determinada instancia de View. Debes actualizar a Activity 1.2.0 y Fragment 1.3.0, y a AppCompat 1.3.0-alpha01 o versiones posteriores para que se realice correctamente la propagación. Las extensiones de Kotlin findViewTreeLifecycleOwner y findViewTreeViewModelStoreOwner están disponibles en lifecycle-runtime-ktx y lifecycle-viewmodel-ktx, respectivamente.
  • Baja de la extensión LiveData.observe() de Kotlin: 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.

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() de SavedStateHandle ahora es coherente antes y después de que se guarda el estado. También incluye las claves usadas anteriormente con setSavedStateProvider(), además de las claves que se usan con set() y getLiveData(). (aosp/1517919, b/174713653)

Contribución externa

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

Cambios en la documentación

  • Se actualizaron el compilador liveData y los documentos asLiveData() 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 objeto Lifecycle.Event para generar el elemento Event en función del parámetro State y una dirección de transición. Se agregó el método getTargetState() que proporciona el elemento State al que el objeto Lifecycle pasará directamente después del parámetro Event. (I00887)
  • Se agregaron las API de Lifecycle.withStateAtLeast que 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étodos when* 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 DESTROYED como un estado terminal. (I00887)
  • El objeto LifecycleRegistry ahora 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 objetos LifecycleRegistry que pertenecen a tus propios componentes, puedes optar por no participar explícitamente de las comprobaciones mediante el elemento LifecycleRegistry.createUnsafe(...), pero debes asegurarte de que exista una sincronización apropiada cuando se acceda a este objeto LifecycleRegistry desde diferentes subprocesos. (Ie7280, b/137392809)

Correcciones de errores

  • Se corrigió una falla en NullSafeMutableLiveData. (b/159987480)
  • Se corrigió un objeto ObsoleteLintCustomCheck para las comprobaciones de Lint agrupadas con el elemento lifecycle-livedata-core-ktx (y, específicamente, el objeto NullSafeMutableLiveData). (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

  • LiveData ahora controla mejor los casos de reentrantes y evita las llamadas duplicadas a onActive() o onInactive(). (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 NonNullableMutableLiveData ahora abarca muchos más casos en los que se estableció un valor null en un MutableLiveData con 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

  • SavedStateHandle ahora admite la serialización diferida, ya que te permite llamar a setSavedStateProvider() para una clave determinada, lo que proporciona un SavedStateProvider que devolverá la llamada a saveState() cuando se le solicite a SavedStateHandle guardar su estado. (b/155106862)
  • Una nueva API de ViewTreeViewModelStoreOwner.get(View) te permite recuperar el ViewModelStoreOwner contenedor dado que tiene una instancia de View. Debes actualizar a Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 y AppCompat 1.3.0-alpha01 para completarlo correctamente. Se agregó una extensión findViewModelStoreOwner() de Kotlin a lifecycle-viewmodel-ktx. (aosp/1295522)

Correcciones de errores

  • Se corrigió un problema que impedía publicar las comprobaciones de lint MutableLiveData lanzadas en Lifecycle 2.3.0-alpha01 junto con el artefacto lifecycle-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

  • SavedStateViewModelFactory ahora te permite pasar un Application nulo a su constructor para mejorar los casos en los que uno no está disponible y no se necesita compatibilidad con AndroidViewModel. (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 el LifecycleOwner contenedor dado que tiene una instancia de View. Debes actualizar a Activity 1.2.0-alpha01 y Fragment 1.3.0-alpha01 para completarlo correctamente. Hay una extensión de Kotlin de findViewTreeLifecycleOwner disponible en lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Se agregó una nueva verificación de Lint que te avisa al establecer un valor null en un MutableLiveData que se definió en Kotlin como no nulo. Esta función está disponible al usar los artefactos livedata-core-ktx o livedata-ktx. (aosp/1154723, aosp/1159092)
  • Hay un nuevo artefacto lifecycle-runtime-testing disponible que proporciona un TestLifecycleOwner que implementa LifecycleOwner y proporciona un Lifecycle mutable seguro para subprocesos. (aosp/1242438)

Correcciones de errores

  • El artefacto lifecycle-runtime ahora 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-ktx agrega integración entre las corrutinas de Lifecycle y Kotlin. También se expandió lifecycle-livedata-ktx para 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 elemento Fragment o FragmentActivity al nuevo constructor ViewModelProvider(ViewModelStoreOwner) para lograr la misma funcionalidad cuando utilizas Fragment 1.2.0
  • Se dio de baja el artefactolifecycle-extensions: Dado que ViewModelProviders.of() dejó de estar disponible, esta versión marca la baja de la última API en lifecycle-extensions y 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-service si usas LifecycleService, y lifecycle-process si usas ProcessLifecycleOwner) en lugar de utilizar lifecycle-extensions, ya que no habrá una versión 2.3.0 futura de lifecycle-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 usar LifecycleEventObserver.

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 ViewModel ficticio se almacenaba en ViewModelStore y se lo solicitaba más tarde con la configuración de fábrica predeterminada.
  • Corrige un uso de Dispatchers.Main.immediate en launchWhenCreated y 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 launchWhenCreated y los métodos relacionados ejecutaban un marco más tarde que el método de ciclo de vida asociado debido al uso de Dispatchers.Main, en lugar de Dispatchers.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 ProcessLifecycleOwner y el movimiento de LifecycleOwner de la actividad de inicio y reanudación en dispositivos Android 10. (aosp/1128132)
  • Se corrigió una regresión introducida en Lifecycle 2.2.0-alpha05 que generaba una NullPointerException al usar la versión 2.0.0 o 2.1.0 de lifecycle-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 artículo.

Nuevas funciones

  • lifecycleScope, whenCreated, whenStarted, whenResumed, viewModelScope y la implementación subyacente de liveData ahora usan Dispatchers.Main.immediate, en lugar de Dispatchers.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 artículo.

Nuevas funciones

Cambios en la API

  • ViewModelProviders.of() dejó de estar disponible. Puedes pasar un elemento Fragment o FragmentActivity al nuevo constructor ViewModelProvider(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 artículo.

Cambios en la API

  • Se reemplazó LiveDataScope.initialValue por LiveDataScope.latestValue, que realizará un seguimiento del valor emitido actual del bloque liveData.
  • Se agregó una nueva sobrecarga al compilador liveData que recibe el parámetro timeout como Duration de 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 artículo.

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 ViewModel accedan y contribuyan al estado guardado. Este objeto se puede recibir en el constructor de la clase ViewModel, y las fábricas proporcionadas de forma predeterminada por Fragments y AppCompatActivity introducirán SavedStateHandle automáticamente.
  • Se agregó AbstractSavedStateViewModelFactory. Te permite crear fábricas personalizadas para la clase ViewModel y proporcionarles acceso a SavedStateHandle.

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 una IllegalStateException. (b/139093676)
  • Se corrigió una IllegalStateException al usar AbstractSavedStateViewModelFactory. (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

  • SavedStateViewModelFactory ya no extiende AbstractSavedStateViewModelFactory, y SavedStateHandle se 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

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 artículo.

Nuevas funciones

  • Se agregó la sobrecarga de SavedStateHandle.getLiveData(), que acepta un valor predeterminado.

Cambios en la API

  • El nombre de SavedStateVMFactory cambió por SavedStateViewModelFactory.
  • El nombre de AbstractSavedStateVMFactory cambió por AbstractSavedStateViewModelFactory.

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, ViewModels puede contribuir con SavedState. Para hacerlo, usa la clase predeterminada SavedStateVMFactory, recientemente introducida, y tu ViewModel debería tener un constructor que reciba el objeto SavedStateHandle como parámetro.

Versión 2.1.0

Cambios importantes desde 2.0.0

  • Se agregó LifecycleEventObserver para los casos en que se necesita una secuencia de eventos de Lifecycle. Es una API pública, en lugar de una clase GenericLifecycleObserver oculta.
  • Se agregaron extensiones ktx para los métodos LiveData.observe y Transformations.*.
  • 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 de LiveData.
  • 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 artículo.

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 liveData para transformaciones y observaciones, la inicialización de ViewModel con 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() y by activityViewModels() para admitir directamente ViewModelStore, en lugar de solo un ViewModelStoreOwner. (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.KeyedFactory se quitó. La segunda interfaz, además de ViewModelProvider.Factory, no se ejecutaba correctamente con las nuevas funciones, como delegación de propiedades en by 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 LifecycleRegistry contiene un método setCurrentState() que reemplaza el método setState() obsoleto. (aosp/880715).

Correcciones de errores

  • Se corrigió un problema en el que fallaban las instancias simuladas de ViewModel cuando se borraba el elemento ViewModelStore que 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ó LifecycleEventObserver para los casos en que se necesita una secuencia de eventos de Lifecycle. Es una API pública, en lugar de una clase GenericLifecycleObserver oculta.
  • Se agregaron extensiones ktx para los métodos LiveData.observe y Transformations.*.
  • Se agregó el método Transformations.distinctUntilChanged. Permite crear un nuevo objeto de LiveData que 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 recibe key y Class en el método create.

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.0
  • android.arch.lifecycle:viewmodel:1.1.0

Cambios en la API

  • Se quitaron LifecycleActivity y LifecycleFragment, ya que dejaron de estar disponibles. En su lugar, usa FragmentActivity o AppCompatActivity, o bien asegúrate de que Fragment sea compatible.
  • Se agregaron anotaciones de @NonNull a ViewModelProviders y ViewModelStores.
  • El constructor ViewModelProviders dejó de estar disponible. Usa sus métodos estáticos directamente.
  • ViewModelProviders.DefaultFactory dejó de estar disponible. Usa ViewModelProvider.AndroidViewModelFactory.
  • Se agregó el método ViewModelProvider.AndroidViewModelFactory.getInstance(Application) estático para recuperar un valor Factory estático apto para la creación de instancias ViewModel y AndroidViewModel.