Cycle de vie

Les composants tenant compte des cycles de vie effectuent des actions en réponse à une modification de l'état d'un autre composant (par exemple, des activités ou des fragments). Ces composants vous aident à produire un code mieux organisé, souvent plus léger, et plus facile à gérer.

Ce tableau liste tous les artefacts du groupe androidx.lifecycle.

Artefact Version stable Version finale Version bêta Version alpha
lifecycle-* 2.8.7 - - 2.9.0-alpha08
lifecycle-viewmodel-compose 2.8.7 - - 2.9.0-alpha08
Dernière mise à jour de la bibliothèque: 11 décembre 2024

Déclarer des dépendances

Pour ajouter une dépendance sur Lifecycle, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou module :

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.8.7"
        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"

        // 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.8.7"
        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")

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

Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de compilation.

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 2.9

Version 2.9.0-alpha08

11 décembre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha08. La version 2.9.0-alpha08 contient ces commits.

Nouvelles fonctionnalités

  • Ajoutez ViewModelScenario.recreate pour simuler une erreur de processus système en recréant le ViewModel testé et tous les composants associés. (Id6a69, b/381063087)
  • Les instances LifecycleOwner et ViewModelStoreOwner récupérées via leurs API findViewTree respectives peuvent désormais être résolues via des parents disjoints d'une vue, tels qu'un ViewOverlay. Pour en savoir plus sur les parents de vue disjoints, consultez les notes de version du noyau ou la documentation de ViewTree.setViewTreeDisjointParent. (I800f4)

Modifications apportées à l'API

  • Amélioration de la cohérence des noms et de l'organisation des packages avec SavedStateRegistryOwnerDelegate. (I8c135, b/376026744)

Correction de bugs

  • Cette bibliothèque utilise désormais les annotations de nullité JSpecify, qui sont des annotations de type. Les développeurs Kotlin doivent utiliser les arguments de compilation suivants pour appliquer une utilisation correcte: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode (Ie4340, b/326456246)
  • Documentez la séquence de nettoyage ViewModel.onCleared. (I586c7, b/363984116)

Version 2.9.0-alpha07

13 novembre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha07. La version 2.9.0-alpha07 contient ces commits.

Compatibilité avec la multiplateforme Kotlin

  • Lifecycle ViewModel SavedState est désormais compatible avec KMP. Vous pouvez ainsi utiliser SavedStateHandle dans le code commun. (Ib6394, b/334076622)

Compatibilité avec la sérialisation KotlinX

  • Avec la prise en charge de la sérialisation KotlinX ajoutée dans 1.3.0-alpha05 SavedState, nous avons introduit saved, un délégué de propriété paresseux, pour faciliter le stockage des classes @Serializable dans un SavedStateHandle et la restauration automatique de ces classes lors de la mort et de la recréation du processus. Notez que le délégué saved est paresseux et n'appelle pas le lambda init ni n'enregistre quoi que ce soit dans SavedStateHandle tant qu'il n'y a pas accès. (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
        }
    }
    

Modifications apportées à l'API

  • Ajoutez getMutableStateFlow à SavedStateHandle pour renvoyer un MutableStateFlow. Cette nouvelle fonction est exclusive aux clés et ne peut pas être utilisée avec getLiveData. Une exception est générée si vous essayez d'utiliser les deux pour accéder au même état. (I04a4f, b/375408415)

Version 2.9.0-alpha06

30 octobre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha06. La version 2.9.0-alpha06 contient ces commits.

Nouveaux comportements

  • L'état Lifecycle.DESTROYED est final, et toute tentative de déplacer un Lifecycle vers un autre état entraînera désormais un IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle n'inclut plus de SavedStateProvider.saveState() lorsque le Bundle renvoyé est vide. (I910b5, b/370577987)

Correction de bugs

  • Lifecycle.eventFlow se termine désormais correctement lorsque Lifecycle est DESTROYED. (I293b2, b/374043130)

Version 2.9.0-alpha05

16 octobre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha05 sans modification notable. La version 2.9.0-alpha05 contient ces commits.

Version 2.9.0-alpha04

2 octobre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha04. La version 2.9.0-alpha04 contient ces commits.

Multiplateforme Kotlin

  • Le module lifecycle-viewmodel-savedstate est désormais configuré pour être compatible avec KMP, en vue de la mise à disposition d'API telles que SavedStateHandle dans l'ensemble de sources commun dans une prochaine version. (I503ed, I48764, b/334076622)

Version 2.9.0-alpha03

18 septembre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha03. La version 2.9.0-alpha03 contient ces commits.

Correction de bugs

  • Dans Lifecycle 2.8.6, l'erreur lint NullSafeMutableLiveData a amélioré la prise en charge des castings intelligents, ce qui évite les faux positifs. (85fed6, b/181042665)

Mises à jour des dépendances

Version 2.9.0-alpha02

4 septembre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha02. La version 2.9.0-alpha02 contient ces commits.

Correction de bugs

  • Depuis Lifecycle 2.8.5: mise à jour des règles ProGuard androidx.lifecycle.ReportFragment pour permettre l'obscurcissement . (ff898e1)

Contribution externe

  • Déplacez androidx.compose.ui.platform.LocalLifecycleOwner vers l'ensemble de sources commun (KMP). Merci à Ivan Matkov de JetBrains pour sa contribution. (8cd5d03)
  • À partir de Lifecycle 2.8.5: le délégué d'extension SavedStateHandle.saveable prend désormais en charge les valeurs nullables. Merci à Roman Kalukiewicz pour sa contribution. (0d78ea6)

Version 2.9.0-alpha01

7 août 2024

Publication d'androidx.lifecycle:lifecycle-*:2.9.0-alpha01. La version 2.9.0-alpha01 contient ces commits.

Multiplateforme Kotlin

  • lifecycle-testing est désormais compatible avec KMP. (Iea41e)
  • Ajout de la prise en charge de la cible multiplateforme Kotlin linuxArm64. (I139d3, b/338268719)

Nouvelles fonctionnalités

  • Un nouvel artefact KMP androidx.lifecycle:lifecycle-viewmodel-testing est disponible. Il fournit une classe ViewModelScenario permettant de tester les ViewModels de manière isolée, avec la prise en charge de onCleared (toutes les plates-formes) et de SavedStateHandle (Android uniquement). (337f68d, c9b3409, 9799a95c, b/264602919)
  • La création d'un ViewModel avec ViewModelProvider est désormais thread-safe. Les annotations @MainThread ont été supprimées. (Ifd978, b/237006831)

Modifications apportées à l'API

  • Ajoutez la fonction de fabrique CreationExtras.Key() pour simplifier la création d'objets CreationExtras.Key anonymes. (I970ee)
  • CreationExtras inclut désormais des surcharges d'opérateurs semblables à des cartes pour permettre une manipulation idiomatique du contenu en Kotlin. Il permet d'utiliser in, += et + avec CreationExtras. (Ib4353)
  • CreationExtras implémente désormais les méthodes equals, hashCode et toString. (Ib4353)
  • NewInstanceFactory est désormais disponible sur les cibles JVM Desktop et Android. (d3d0892)
  • Propriété d'extension intégrée pour exposer de manière sécurisée l'application sous-jacente dans la version 2.0 du langage Kotlin (I39df2)

Correction de bugs

  • Suppression de la description manuelle de l'accès aux nouvelles API de la plate-forme, car cela se produit automatiquement via la modélisation d'API lorsque vous utilisez R8 avec AGP 7.3 ou version ultérieure (par exemple, R8 version 3.3) et pour tous les builds lorsque vous utilisez AGP 8.1 ou version ultérieure (par exemple, D8 version 8.1). Les clients qui n'utilisent pas AGP sont invités à passer à la version 8.1 de D8 ou ultérieure. Consultez cet article pour en savoir plus. (If6b4c, b/345472586)

Version 2.8

Version 2.8.7

30 octobre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.7. La version 2.8.7 contient ces commits.

Modifications apportées à l'API

  • androidx.compose.ui.platform.LocalLifecycleOwner est désormais disponible dans le kit de sources commun (KMP). (6a3f5b3)
  • lifecycle-runtime-compose: les artefacts desktop ont été supprimés, et les artefacts -jvmStubs et -linuxx64Stubs ont été ajoutés. Aucune de ces cibles n'est destinée à être utilisée. Il s'agit de repères destinés à aider les efforts de Jetbrains Compose. (6a3f5b3)

Version 2.8.6

18 septembre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.6. La version 2.8.6 contient ces commits.

Correction de bugs

  • L'erreur lint NullSafeMutableLiveData a amélioré la compatibilité avec les castings intelligents, ce qui évite les faux positifs. (85fed6, b/181042665)

Mises à jour des dépendances

Version 2.8.5

4 septembre 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.5. La version 2.8.5 contient ces commits.

Correction de bugs

  • Mettez à jour les règles ProGuard androidx.lifecycle.ReportFragment pour autoriser l'obscurcissement . (ff898e1)

Contribution externe

  • Le délégué d'extension SavedStateHandle.saveable est désormais compatible avec les valeurs nullables. Merci à Roman Kalukiewicz pour sa contribution. (0d78ea6)

Version 2.8.4

24 juillet 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.4. La version 2.8.4 contient ces commits.

Correction de bugs

  • LiveData.asFlow() gère désormais correctement les cas où le flux renvoyé est immédiatement terminé après avoir reçu une valeur déjà définie sur le LiveData (par exemple, lors de l'utilisation de take(1)). (I9c566)
  • La finalisation de Lifecycle*Effect est désormais idempotente (c'est-à-dire que si onStopOrDispose a été appelé en raison de l'arrêt du cycle de vie, il ne sera pas appelé une deuxième fois lors de la suppression, sauf si le cycle de vie revient à STARTED). (I5f607, b/352364595)

Version 2.8.3

1er juillet 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.3. La version 2.8.3 contient ces commits.

Correction de bugs

  • Correction d'un problème de rétrocompatibilité de Lifecycle 2.8 avec Compose 1.6.0 et versions antérieures lors de l'utilisation de la réduction du code. (aosp/3133056, b/346808608)

Version 2.8.2

12 juin 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.2. La version 2.8.2 contient ces commits.

Correction de bugs

  • Correction des erreurs CompositionLocal LocalLifecycleOwner not present lors de l'utilisation de Lifecycle 2.8.X avec Compose 1.6.X ou version antérieure. Vous pouvez désormais utiliser Lifecycle 2.8.2 avec n'importe quelle version de Compose sans avoir à trouver de solutions de contournement. (aosp/3105647, b/336842920)
  • ViewModelProvider ne plante plus lors du mélange de versions antérieures de dépendances Lifecycle compileOnly avec des versions équivalentes ou supérieures à 2.8, ce qui corrige les problèmes liés aux bibliothèques telles que LeakCanary. (I80383, b/341792251)

Version 2.8.1

29 mai 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.1. La version 2.8.1 contient ces commits.

Correction de bugs

  • lifecycle-viewmodel-compose ne comporte désormais qu'une dépendance commune sur compose-runtime, ce qui supprime sa dépendance commune sur compose-ui. L'artefact Android conserve son compose-ui pour des raisons de compatibilité. (aosp/3079334, b/339562627)
  • L'intégration de saveable dans ViewModel à l'aide de délégués de propriété utilise désormais le nom de la classe dans la clé générée automatiquement, ce qui évite les conflits si plusieurs classes utilisent le même SavedStateHandle. (aosp/3063463)

Version 2.8.0

14 mai 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.0. La version 2.8.0 contient ces commits.

Changements importants depuis la version 2.7.0

  • LocalLifecycleOwner a été déplacé de l'UI Compose vers lifecycle-runtime-compose afin que ses API d'assistance basées sur Compose puissent être utilisées en dehors de l'UI Compose.
  • L'artefact lifecycle-runtime-compose contient désormais les API dropUnlessResumed et dropUnlessStarted, qui vous permettent de supprimer les clics ou d'autres événements qui se produisent même après que le LifecycleOwner est descendu en dessous du Lifecycle.State donné. Par exemple, vous pouvez l'utiliser avec Navigation Compose pour éviter de gérer les événements de clic après le début d'une transition vers un autre écran: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope est désormais un paramètre de constructeur pouvant être ignoré, ce qui vous permet d'injecter votre propre distributeur et SupervisorJob() ou de remplacer la valeur par défaut à l'aide de backgroundScope disponible dans runTest. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel a été réécrit en Kotlin et utilise désormais AutoClosable au lieu de Closeable. Il est désormais possible d'ajouter des objets AutoCloseable avec un key qui permet de les récupérer via getCloseable().

  • Appeler LifecycleStartEffect et LifecycleResumeEffect sans clé génère désormais une erreur, conformément à la même convention que l'API DisposableEffect que ces API reflètent.

  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) est désormais obsolète et remplacé par LiveData.toPublisher(lifecycleOwner).

  • Les extensions Kotlin lifecycle-livedata-core-ktx ont été déplacées vers le module lifecycle-livedata-core.

  • NullSafeMutableLiveData a été refactorisé pour éviter de nombreux faux positifs.

Compatibilité de la multiplateforme Kotlin avec le cycle de vie

Les API principales de cycle de vie dans Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event et LifecycleRegistry sont désormais fournies dans des artefacts compatibles avec Kotlin Multiplatform.

Artefacts concernés:

  • lifecycle-common transfère la plupart des API vers common et est compatible avec jvm et iOS en plus d'Android.
  • lifecycle-runtime transfère la plupart des API vers common et est compatible avec jvm et iOS en plus d'Android.
  • lifecycle-runtime-ktx est désormais vide, et toutes les API ont été déplacées vers lifecycle-runtime.
  • lifecycle-runtime-compose déplace toutes les API vers common et fournit un artefact Android, ce qui correspond à la compatibilité multiplate-forme de androidx.compose.

Compatibilité de ViewModel avec la multiplateforme Kotlin

L'artefact lifecycle-viewmodel et les API telles que ViewModel, ViewModelStore, ViewModelStoreOwner et ViewModelProvider sont désormais fournis dans des artefacts compatibles avec Kotlin Multiplatform.

Pour prendre en compte cette modification, les méthodes telles que celles sur ViewModelProvider qui utilisaient un java.lang.Class<T> disposent désormais d'une méthode équivalente qui utilise un kotlin.reflect.KClass<T>.

La compatibilité binaire sur Android a été maintenue, mais il existe quelques modifications notables lorsque l'on compare la surface de l'API Android à la surface de l'API commune:

  • La création d'une instance ViewModelProvider s'effectue désormais via les méthodes ViewModelProvider.create() au lieu d'appeler directement son constructeur.
  • ViewModelProvider.NewInstanceFactory et ViewModelProvider.AndroidViewModelFactory ne sont disponibles que sur Android.
    • Il est recommandé d'étendre les fabriques personnalisées à partir de ViewModelProvider.Factory et d'utiliser la méthode create qui accepte un CreationExtras ou le DSL Kotlin viewModelFactory.
  • L'utilisation de ViewModelProvider sans usine personnalisée sur des plates-formes autres que JVM entraîne une erreur UnsupportedOperationException. Sur les plates-formes JVM, la compatibilité est préservée en utilisant le constructeur ViewModel sans arguments si aucune fabrique personnalisée n'est fournie.
  • viewModelScope est remplacé par EmptyCoroutineContext sur les plates-formes où Dispatchers.Main n'est pas disponible (par exemple, Linux).

Artefacts concernés:

  • lifecycle-viewmodel transfère la plupart des API vers common et est compatible avec jvm et iOS en plus d'Android.
  • lifecycle-viewmodel-ktx est désormais vide, et toutes les API ont été déplacées vers lifecycle-viewmodel.
  • lifecycle-viewmodel-compose déplace toutes les API vers common et fournit un artefact Android, ce qui correspond à la compatibilité multiplate-forme de androidx.compose.

Nouveaux comportements

  • InitializerViewModelFactory (y compris la fonction de création viewModelFactory) génère désormais une exception IllegalArgumentException si un initializer portant le même clazz: KClass<VM : ViewModel> a déjà été ajouté. (Ic3a36)

Problèmes connus

Version 2.8.0-rc01

1er mai 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.0-rc01. La version 2.8.0-rc01 contient ces commits.

Correction de bugs

  • Correction d'un problème qui empêchait le profil de référence des classes lifecycle-common d'être correctement empaqueté. Ils sont désormais empaquetés dans l'AAR lifecycle-runtime. (aosp/3038274, b/322382422)
  • Correction d'un changement involontaire de l'ordre de suppression des instances AutoCloseable associées à un ViewModel. L'ordre précédent (addCloseable(String, AutoCloseable), puis addClosable(AutoCloseable), puis onCleared()) a été rétabli. (aosp/3041632)
  • Amélioration du comportement de création par défaut de viewModelScope pour les environnements de bureau natifs et JVM. (aosp/3039221)

Contribution externe

  • Merci à Victor Kropp d'avoir amélioré la vérification du thread principal sur JVM Desktop. (aosp/3037116)

Version 2.8.0-beta01

17 avril 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.0-beta01. La version 2.8.0-beta01 contient ces commits.

Nouvelles fonctionnalités

  • L'artefact lifecycle-runtime-compose est désormais compatible avec Kotlin multiplateforme. Il transfère son code vers common et fournit un artefact Android, ce qui correspond à la compatibilité multiplateforme de androidx.compose. (If7a71, I4f4a0, b/331769623)

Version 2.8.0-alpha04

3 avril 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.0-alpha04. La version 2.8.0-alpha04 contient ces commits.

Nouvelles fonctionnalités

  • L'artefact lifecycle-viewmodel-compose est désormais compatible avec Kotlin multiplateforme. Il transfère son code vers common et fournit un artefact Android, ce qui correspond à la compatibilité multiplateforme de androidx.compose. Pour tenir compte de cette modification, la méthode viewModel du composable accepte désormais un KClass en plus d'un java.lang.Class. (b/330323282)

Correction de bugs

Mise à jour de la dépendance

  • L'artefact lifecycle-viewmodel-compose dépend désormais de Compose 1.6.0.
  • Lifecycle dépend désormais de Profile Installer 1.3.1.

Version 2.8.0-alpha03

20 mars 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.0-alpha03. La version 2.8.0-alpha03 contient ces commits.

Nouvelles fonctionnalités

  • ViewModel.viewModelScope est désormais un paramètre de constructeur pouvant être ignoré, ce qui vous permet d'injecter votre propre distributeur et SupervisorJob() ou de remplacer la valeur par défaut à l'aide de backgroundScope disponible dans runTest. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

Compatibilité avec la multiplateforme Kotlin

L'artefact lifecycle-viewmodel et les API telles que ViewModel, ViewModelStore, ViewModelStoreOwner et ViewModelProvider sont désormais fournis dans des artefacts compatibles avec Kotlin Multiplatform. (b/214568825)

Pour prendre en compte cette modification, les méthodes telles que celles sur ViewModelProvider qui utilisaient un java.lang.Class<T> disposent désormais d'une méthode équivalente qui utilise un kotlin.reflect.KClass<T>.

La compatibilité binaire sur Android a été maintenue, mais il existe quelques modifications notables lorsque l'on compare la surface de l'API Android à la surface de l'API commune:

  • La création d'une instance ViewModelProvider s'effectue désormais via les méthodes ViewModelProvider.create() au lieu d'appeler directement son constructeur.
  • ViewModelProvider.NewInstanceFactory et ViewModelProvider.AndroidViewModelFactory ne sont disponibles que sur Android.
    • Il est recommandé d'étendre les fabriques personnalisées à partir de ViewModelProvider.Factory et d'utiliser la méthode create qui accepte un CreationExtras ou le DSL Kotlin viewModelFactory.
  • L'utilisation de ViewModelProvider sans usine personnalisée sur des plates-formes autres que JVM entraîne une erreur UnsupportedOperationException. Sur les plates-formes JVM, la compatibilité est préservée en utilisant le constructeur ViewModel sans arguments si aucune fabrique personnalisée n'est fournie.
  • viewModelScope est remplacé par un EmptyCoroutineContext sur les plates-formes où Dispatchers.Main n'est pas disponible (par exemple, Linux).

Nouveaux comportements

  • InitializerViewModelFactory (y compris la fonction de création viewModelFactory) génère désormais une exception IllegalArgumentException si un initializer portant le même clazz: KClass<VM : ViewModel> a déjà été ajouté. (Ic3a36)

Correction de bugs

  • ViewModel.getCloseable gère désormais les clés en double: si une ressource AutoCloseable est déjà associée à key, l'ancienne ressource est remplacée et fermée immédiatement. (Ibeb67)
  • L'accès à l'viewModelScope d'un ViewModel est désormais thread-safe. (If4766, b/322407038)

Contribution externe

  • LocalLifecycleOwner est passé de l'UI Compose à lifecycle-runtime-compose afin que ses API d'assistance basées sur Compose puissent être utilisées en dehors de l'UI Compose. Merci à Jake Wharton pour sa contribution. (I6c41b, b/328263448)

Version 2.8.0-alpha02

21 février 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.0-alpha02. Liste des commits de la version 2.8.0-alpha02

Nouvelles fonctionnalités

  • Les API dropUnlessResumed et dropUnlessStarted ont été ajoutées. Elles vous permettent de supprimer les clics ou d'autres événements qui se produisent même après que le LifecycleOwner est descendu en dessous du Lifecycle.State donné. Par exemple, vous pouvez l'utiliser avec Navigation Compose pour éviter de gérer les événements de clic après le début d'une transition vers un autre écran: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Conversions Kotlin

  • ViewModel est désormais écrit en Kotlin (I16f26, b/214568825).
  • Les extensions Kotlin lifecycle-viewmodel-ktx ont été déplacées vers le module de cycle de vie de base. (Id787b, b/274800183)
  • Les extensions Kotlin lifecycle-runtime-ktx ont été déplacées vers le module de cycle de vie de base. (Ic3686, b/274800183)
  • Les extensions Kotlin lifecycle-livedata-core-ktx ont été déplacées vers le module de cycle de vie de base. (I54a3d, b/274800183)

Compatibilité avec la multiplateforme Kotlin

  • Les API principales de cycle de vie dans Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event et LifecycleRegistry sont désormais fournies dans des artefacts compatibles avec Kotlin Multiplatform. (b/317249252)

Modifications apportées à l'API

  • Appeler LifecycleStartEffect et LifecycleResumeEffect sans clé génère désormais une erreur, conformément à la même convention que l'API DisposableEffect que ces API reflètent. (Ib0e0c, b/323518079)
  • ViewModel utilise désormais AutoCloseable au lieu de Closeable. Il s'agit d'une modification rétrocompatible. (I27f8e, b/214568825)
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) est désormais obsolète et remplacé par LiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)

Contribution externe

  • Merci à Ivan Matkov de JetBrains d'avoir contribué à la migration de Lifecycle vers la multiplateforme Kotlin. (aosp/2926690, I0c5ac, If445d)

Version 2.8.0-alpha01

24 janvier 2024

Publication d'androidx.lifecycle:lifecycle-*:2.8.0-alpha01. Liste des commits de la version 2.8.0-alpha01

Nouvelles fonctionnalités

  • ViewModel permet désormais d'ajouter des objets Closeable avec un key qui permet de les récupérer via getCloseable(). (I3cf63)

Version 2.7

Version 2.7.0

10 janvier 2024

Publication d'androidx.lifecycle:lifecycle-*:2.7.0. Liste des commits de la version 2.7.0

Modifications importantes depuis la version 2.6.0

  • TestLifecycleOwner inclut désormais une fonction de suspension setCurrentState() qui garantit que le changement d'état et tous les rappels LifecycleObserver sont terminés avant le retour. Il est à noter que, contrairement à la définition directe de la propriété currentState, cette méthode n'utilise pas runBlocking. Elle peut donc être utilisée en toute sécurité dans une coroutine, comme celle fournie par runTest.
  • Les extensions LiveData de map et switchMap reflètent désormais le comportement de distinctUntilChanged. Si value est défini pour LiveData, la fonction map/switchMap est immédiatement appelée pour renseigner value de l'LiveData renvoyé. Cela garantit que la valeur initiale sera définie dans le cadre de la première composition (lorsqu'utilisée avec observeAsState()), mais ne modifie pas le comportement d'observation. Les valeurs mises à jour à partir de la source LiveData ne s'appliquent toujours que lorsque vous commencez à observer l'LiveData.
  • Cette version corrige un problème qui empêchait SavedStateHandle de restaurer correctement les classes Parcelable personnalisées après la fin et la recréation du processus. En raison des informations de type perdues par le framework Android, les tableaux de Parcelables personnalisés nécessitent un travail supplémentaire (création manuelle d'un tableau typé du bon type). La documentation sur get, getLiveData et getStateFlow fait désormais spécifiquement référence à cette limitation.
  • Les règles de conservation ProGuard associées à LifecycleObserver ont été supprimées. Cela signifie que le code protégé qui souhaite utiliser des API via la réflexion (par exemple, à l'aide de l'annotation @OnLifecycleEvent obsolète depuis longtemps) devra fournir ses propres règles de conservation pour son cas d'utilisation spécifique.

Observabilité des événements de cycle de vie

  • Au lieu d'utiliser un LifecycleEventObserver, vous pouvez désormais observer un Flow de Lifecycle.Event via la méthode d'extension Lifecycle.asFlow().
  • Les utilisateurs de Jetpack Compose peuvent désormais utiliser LifecycleEventEffect pour exécuter les effets secondaires de Compose en fonction de Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Les utilisateurs de Jetpack Compose peuvent utiliser LifecycleStartEffect et LifecycleResumeEffect pour gérer des paires d'événements (début à arrêt et reprise à pause, respectivement). Cette API reflète celle de DisposableEffect et convient aux cas où le changement effectué lorsque l'état augmente doit être inversé lorsque l'état diminue.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Pour en savoir plus, consultez Exécuter du code sur des événements de cycle de vie.

Observabilité de l'état du cycle de vie

  • Le Lifecycle.State actuel peut désormais être observé via la propriété Lifecycle.currentStateFlow, qui renvoie un StateFlowvalue est le Lifecycle.State actuel.
  • Les utilisateurs de Jetpack Compose peuvent utiliser l'extension Lifecycle.currentStateAsState() pour exposer directement Lifecycle.State en tant que State Compose. Cela équivaut à lifecycle.currentStateFlow.collectAsState() (et constitue une alternative plus courte).

Pour en savoir plus, consultez la section Collecter l'état du cycle de vie avec des flux.

Version 2.7.0-rc02

13 décembre 2023

Publication d'androidx.lifecycle:lifecycle-*:2.7.0-rc02. Liste des commits de la version 2.7.0-rc02

Correction de bugs

  • Correction d'un problème qui empêchait SavedStateHandle de restaurer correctement les classes Parcelable personnalisées après la fin et la recréation du processus. En raison des informations de type perdues par le framework Android, les tableaux de Parcelables personnalisés nécessitent un travail supplémentaire (création manuelle d'un tableau typé du bon type). La documentation sur get, getLiveData et getStateFlow mentionne désormais spécifiquement cette limitation. (I0b55a)

Version 2.7.0-rc01

15 novembre 2023

Publication d'androidx.lifecycle:lifecycle-*:2.7.0-rc01. Liste des commits de la version 2.7.0-rc01

Correction de bugs

  • LifecycleStartEffect et LifecycleResumeEffect suppriment et recréent désormais correctement le bloc d'effet si le LifecycleOwner est modifié. (Ia25c6)

Version 2.7.0-beta01

1er novembre 2023

Publication d'androidx.lifecycle:lifecycle-*:2.7.0-beta01 sans aucune modification. Liste des commits de la version 2.7.0-beta01

  • Mise à jour de la version bêta, aucune modification majeure apportée à cette version.

Version 2.7.0-alpha03

18 octobre 2023

Publication d'androidx.lifecycle:lifecycle-*:2.7.0-alpha03. Liste des commits de la version 2.7.0-alpha03

Nouvelles fonctionnalités

  • lifecycle-runtime-testing contient désormais une nouvelle vérification lint pour éviter de définir le Lifecycle.State du TestLifecycleOwner à l'aide du champ currentState lorsqu'il se trouve dans une coroutine. La vérification lint suggère désormais de suspendre setCurrentState, ce qui permet de définir Lifecycle.State sans blocage. (Icf728, b/297880630)

Correction de bugs

  • Correction d'un problème avec LiveData.switchMap qui empêchait l'ajout de l'instance LiveData en tant que source si la même instance LiveData était renvoyée à la fois lors de l'appel initial et d'un appel ultérieur. (Ibedcba7)

Version 2.7.0-alpha02

6 septembre 2023

Publication d'androidx.lifecycle:lifecycle-*:2.7.0-alpha02. Liste des commits de la version 2.7.0-alpha02

Nouvelles fonctionnalités

  • TestLifecycleOwner inclut désormais la fonction de suspension setCurrentState() pour permettre aux utilisateurs d'utiliser TestLifecycleOwner à partir d'une coroutine, comme celle fournie par runTest. (I329de, b/259344129)

Modifications apportées à l'API

  • Tous les fichiers des modules lifecycle-livedata-ktx ont été déplacés vers le module lifecycle-livedata principal. (I10c6f, b/274800183)

Nouveaux comportements

  • Les extensions LiveData.map() et LiveData.switchMap() définissent désormais l'élément value de l'objet LiveData renvoyé si une valeur a été définie pour l'objet LiveData précédent, ce qui garantit que l'utilisation du LiveData obtenu dans Jetpack Compose a le bon état pour la composition initiale. (I91d2b, b/269479952)
  • Le addCloseable() de ViewModel ferme désormais immédiatement la Closeable si ViewModel a déjà reçu un appel à onCleared(). (I4712e, b/280294730)

Correction de bugs

  • À partir de Lifecycle 2.6.2: correction d'un problème qui empêchait la restauration correcte de SavedStateHandle après la fin du processus si l'état était restauré, save() était appelé sans enregistrer réellement l'état dans le SavedStateRegistry parent, puis l'état était restauré à nouveau. Cela corrige l'interaction entre rememberSaveable et NavHost de Navigation Compose. (aosp/2729289)

Version 2.7.0-alpha01

26 juillet 2023

Publication d'androidx.lifecycle:lifecycle-*:2.7.0-alpha01. Liste des commits de la version 2.7.0-alpha01

Modifications apportées à l'API

  • Lifecycle.State est désormais observable par Compose via Lifecycle.currentStateFlow, qui renvoie un StateFlowvalue est l'Lifecycle.State actuel. (Ib212d, b/209684871)
  • Les Lifecycle.Event peuvent désormais être observés en tant que Flow avec Lifecycle.asFlow().. (If2c0f, b/176311030)
  • L'API LifecycleResumeEffect a été ajoutée pour exécuter des SideEffect Compose en fonction des rappels d'événements Lifecycle.Event.ON_RESUME et Lifecycle.Event.ON_PAUSE. (I60386, b/235529345)
  • L'API LifecycleStartEffect a été ajoutée pour exécuter des SideEffect Compose en fonction des rappels d'événements Lifecycle.Event.ON_START et Lifecycle.Event.ON_STOP. (I5a8d1, b/235529345)
  • L'API LifecycleEventEffect a été ajoutée pour exécuter des SideEffect Compose basés sur Lifecycle.Event. (Ic9794, b/235529345)
  • L'extension Lifecycle.collectAsState() a été ajoutée pour exposer directement Lifecycle.State en tant que State Compose. Cela équivaut à lifecycle.currentStateFlow.collectAsState() (et constitue une alternative plus courte). (I11015, b/235529345)

Correction de bugs

  • L'extension LiveData.distinctUntilChanged() définit désormais l'élément value de l'objet LiveData renvoyé si une valeur a été définie pour l'objet LiveData précédent. Cela ne change pas le comportement d'observation. Les valeurs mises à jour à partir de la source LiveData s'appliquent uniquement lorsque vous commencez à observer les objets LiveData renvoyés par distinctUntilChanged(). (Ib482f)
  • Les règles de conservation ProGuard associées à LifecycleObserver ont été supprimées. Cela signifie que le code protégé qui souhaite utiliser des API via la réflexion devra fournir ses propres règles de conservation pour son cas d'utilisation spécifique. (Ia12fd)

Version 2.6

Version 2.6.2

6 septembre 2023

Publication d'androidx.lifecycle:lifecycle-*:2.6.2. Liste des commits de la version 2.6.2

Correction de bugs

  • Correction d'un problème qui empêchait SavedStateHandle d'être correctement restauré à la fin du processus si l'état était restauré, que save() était appelé sans enregistrer réellement l'état dans le SavedStateRegistry parent, puis que l'état était restauré à nouveau. Cela corrige l'interaction entre rememberSaveable et NavHost de Navigation Compose. (aosp/2729289)

Version 2.6.1

22 mars 2023

Publication d'androidx.lifecycle:lifecycle-*:2.6.1. Liste des commits de la version 2.6.1

Mises à jour des dépendances

Version 2.6.0

8 mars 2023

Publication d'androidx.lifecycle:lifecycle-*:2.6.0. Liste des commits de la version 2.6.0

Modifications importantes depuis la version 2.5.0

  • LiveData inclut désormais une nouvelle propriété isInitialized qui indique si une valeur explicite a déjà été définie pour LiveData. Vous pouvez ainsi faire la distinction entre liveData.value qui renvoie null, car aucune valeur n'a jamais été définie, ou une valeur null explicite.
  • MediatorLiveData comprend désormais un constructeur pour définir une valeur initiale.
  • Ajout d'une extension sur StateFlow et Flow de collectAsStateWithLifecycle(), qui collecte des données à partir des flux et représente sa dernière valeur en tant qu'état Compose tout en tenant compte du cycle de vie.
  • Abandon des méthodes Lifecycle.launchWhenX et Lifecycle.whenX, car l'utilisation d'un coordinateur de suspension peut entraîner le gaspillage de ressources dans certains cas. Nous vous recommandons d'utiliser Lifecycle.repeatOnLifecycle. Pour en savoir plus sur la suspension ponctuelle des tâches, consultez cette explication sur les raisons pour lesquelles cette pratique est intrinsèquement dangereuse.
  • Conversion en Kotlin : un grand nombre de classes Lifecycle ont été converties en Kotlin. Toutes les classes converties conservent leur compatibilité binaire avec les versions précédentes. Les classes suivantes ont des modifications incompatibles avec la source pour les classes écrites en Kotlin: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner

Le tableau ci-dessous présente les conversions sources pour la nouvelle version du cycle de vie.

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 possibilité de valeur nulle de la méthode onChanged d'un Observer créé en Kotlin correspond désormais à la possibilité de valeur nulle du type générique. Si vous souhaitez que Observer.onChanged() accepte un type nullable, vous devez instancier Observer avec un type nullable.
  • Ces classes ont également été converties en Kotlin, mais restent compatibles avec la source: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher et ProcessLifecycleOwner.

Version 2.6.0-rc01

22 février 2023

Publication d'androidx.lifecycle:lifecycle-*:2.6.0-rc01. Liste des commits de la version 2.6.0-rc01

Correction de bugs

  • L'extension LiveData.distinctUntilChanged() définit désormais l'élément value de l'objet LiveData renvoyé si une valeur a été définie pour l'objet LiveData précédent. Cela ne change pas le comportement d'observation. Les valeurs mises à jour à partir de la source LiveData s'appliquent uniquement lorsque vous commencez à observer les objets LiveData renvoyés par distinctUntilChanged(). (Ib482f)

Version 2.6.0-beta01

8 février 2023

Publication d'androidx.lifecycle:lifecycle-*:2.6.0-beta01. Liste des commits de la version 2.6.0-beta01

Conversions Kotlin

  • LifecycleOwner est désormais écrit en Kotlin. Il s'agit d'une modification incompatible avec la source pour les classes écrites en Kotlin. Elles doivent désormais remplacer la propriété lifecycle au lieu d'implémenter la fonction getLifecycle() précédente. (I75b4b, b/240298691)
  • ViewModelStoreOwner est désormais écrit en Kotlin. Il s'agit d'une modification incompatible avec la source pour les classes écrites en Kotlin. Elles doivent désormais remplacer la propriété viewModelStore au lieu d'implémenter la fonction getViewModelStore() précédente. (I86409, b/240298691)
  • L'extension Kotlin sur LifecycleOwner qui fournit le champ lifecycleScope a été déplacée vers l'artefact lifecycle-common à partir de lifecycle-runtime-ktx. (I41d78, b/240298691)
  • L'extension Kotlin sur Lifecycle qui fournit le champ coroutineScope a été déplacée vers l'artefact lifecycle-common à partir de lifecycle-runtime-ktx. (Iabb91, b/240298691)

Version 2.6.0-alpha05

25 janvier 2023

Publication d'androidx.lifecycle:lifecycle-*:2.6.0-alpha05. Liste des commits de la version 2.6.0-alpha05.

Conversions Kotlin

  • Transformations est désormais écrit en Kotlin. Il s'agit d'une modification incompatible avec la source pour les classes écrites en Kotlin qui utilisaient directement la syntaxe, comme Transformations.map. Le code Kotlin doit à présent utiliser la syntaxe de la méthode d'extension Kotlin qui n'était auparavant disponible que lors de l'utilisation de lifecycle-livedata-ktx. Lorsque vous utilisez le langage de programmation Java, les versions de ces méthodes qui utilisent une méthode androidx.arch.core.util.Function sont obsolètes et remplacées par les versions qui acceptent une Function1 Kotlin. Cette modification conserve la compatibilité binaire. (I8e14f)
  • ViewTreeViewModelStoreOwner est désormais écrit en Kotlin. Il s'agit d'une modification incompatible avec la source pour les classes écrites en Kotlin. Vous devez désormais importer et utiliser directement les méthodes d'extension Kotlin sur View de androidx.lifecycle.setViewTreeViewModelStoreOwner et androidx.lifecycle.findViewTreeViewModelStoreOwner pour définir et rechercher un propriétaire défini précédemment. Cette fonctionnalité est compatible avec le binaire et reste compatible avec la source pour les implémentations écrites en langage de programmation Java. (Ia06d8, Ib22d8, b/240298691)
  • L'interface HasDefaultViewModelProviderFactory est désormais écrite en Kotlin. Il s'agit d'une modification incompatible avec la source pour les classes écrites en Kotlin. Elles doivent à présent remplacer les propriétés defaultViewModelProviderFactory et defaultViewModelCreationExtras plutôt que d'implémenter les précédentes fonctions correspondantes. (Iaed9c, b/240298691)
  • Observer est désormais écrit en Kotlin. Sa méthode onChanged() utilise à présent le nom value comme paramètre. (Iffef2, I4995e, b/240298691)
  • AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher et ProcessLifecycleOwner sont désormais écrits en Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

Version 2.6.0-alpha04

11 janvier 2023

Publication d'androidx.lifecycle:lifecycle-*:2.6.0-alpha04. Liste des commits de la version 2.6.0-alpha04

Nouvelles fonctionnalités

  • LiveData inclut désormais une nouvelle propriété isInitialized qui indique si une valeur explicite a déjà été définie pour LiveData. Vous pouvez ainsi faire la distinction entre liveData.value qui renvoie null, car aucune valeur n'a jamais été définie, ou une valeur null explicite. (Ibd018)

Modifications apportées à l'API

  • Les API collectAsStateWithLifecycle() de lifecycle-runtime-compose ne sont plus au stade expérimental. (I09d42, b/258835424)
  • Abandon des méthodes Lifecycle.launchWhenX et Lifecycle.whenX, car l'utilisation d'un coordinateur de suspension peut entraîner le gaspillage de ressources dans certains cas. Nous vous recommandons d'utiliser Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)

Conversions Kotlin

  • ViewTreeLifecycleOwner est désormais écrit en Kotlin. Il s'agit d'une modification incompatible avec la source pour les classes écrites en Kotlin. Vous devez désormais importer et utiliser directement les méthodes d'extension Kotlin sur View de androidx.lifecycle.setViewTreeLifecycleOwner et androidx.lifecycle.findViewTreeLifecycleOwner pour définir et rechercher un propriétaire défini précédemment. Cette action remplace l'extension Kotlin précédente dans lifecycle-runtime-ktx. Cette fonctionnalité est compatible avec le binaire et reste compatible avec la source pour les implémentations écrites en langage de programmation Java. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams est désormais écrit en Kotlin. Les extensions Kotlin précédemment utilisées dans lifecycle-reactivestreams-ktx ont été déplacées dans le module lifecycle-reactivestreams et sont désormais la surface principale du code écrit en Kotlin. Il s'agit d'une modification incompatible avec la source pour le code écrit en Kotlin si vous n'utilisiez pas déjà les API de méthode d'extension Kotlin. (I2b1b9, I95d22, b/240298691)
  • DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver et ViewModelStore sont maintenant écrits en Kotlin. (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)

Correction de bugs

  • Correction du plantage de SavedStateHandle avec une ClassCastException lorsque get() est appelé avec un type de classe incorrect. (I6ae7c)

Version 2.6.0-alpha03

24 octobre 2022

Publication d'androidx.lifecycle:lifecycle-*:2.6.0-alpha03. Liste des commits de la version 2.6.0-alpha03.

Correction de bugs

  • Correction d'un problème lié à des contraintes entre différents modules Lifecycle qui ne fonctionnaient pas comme prévu. (I18d0d, b/249686765)
  • Les erreurs générées par LifecycleRegistry.moveToState() incluent désormais un message d'erreur plus utile qui informe les développeurs du composant à l'origine de l'erreur. (Idf4b2, b/244910446)

Version 2.6.0-alpha02

7 septembre 2022

Publication d'androidx.lifecycle:lifecycle-*:2.6.0-alpha02. Liste des commits de la version 2.6.0-alpha02.

Modifications apportées à l'API

  • MediatorLiveData comprend désormais un constructeur pour définir une valeur initiale. (Ib6cc5, b/151244085)

Correction de bugs

  • Les artefacts Lifecycle comprennent désormais des contraintes qui garantissent que tous les artefacts Lifecycle interdépendants utilisent la même version, ce qui met automatiquement à jour les autres dépendances en cas de mise à niveau. b/242871265
  • FlowLiveData.asFlow() crée désormais un callbackFlow au lieu d'utiliser sa propre implémentation Channel pour garantir la thread safety et la conservation du contexte. (I4a8b2, b/200596935)
  • La fonction asLiveData de FlowLiveData conserve désormais la valeur initiale d'un objet StateFlow lors de la création du nouvel objet LiveData. (I3f530, b/157380488)
  • Pour Lifecycle 2.5.1 : les implémentations personnalisées de AndroidViewModelFactory appellent désormais correctement la fonction create(modelClass) lorsque vous utilisez le constructeur avec état avec Lifecycle 2.4 ou version ultérieure. (I5b315, b/238011621)

Version 2.6.0-alpha01

29 juin 2022

Publication d'androidx.lifecycle:lifecycle-*:2.6.0-alpha01. Liste des commits de la version 2.6.0-alpha01.

Nouvelles fonctionnalités

  • Ajout d'une extension sur StateFlow et Flow de collectAsStateWithLifecycle, qui collecte des données à partir des flux et représente sa dernière valeur en tant qu'état Compose tout en prenant en compte le cycle de vie. Le flux est récupéré et la nouvelle émission est définie sur la valeur de l'état lorsque le cycle de vie est au moins égal à un certain Lifecycle.State. Lorsque le cycle de vie passe en dessous de ce Lifecycle.State, la collecte de flux s'arrête et la valeur de l'état n'est pas mise à jour. (I1856e, b/230557927)

Version 2.5

Version 2.5.1

27 juillet 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.1. Liste des commits de la version 2.5.1.

Correction de bugs

  • Les implémentations personnalisées de AndroidViewModelFactory appellent désormais correctement la fonction create(modelClass) lors de l'utilisation du constructeur AndroidViewModelFactory avec état avec Lifecycle 2.4 ou version ultérieure. (I5b315, b/238011621)

Version 2.5.0

29 juin 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0. Liste des commits de la version 2.5.0

Modifications importantes depuis la version 2.4.0

  • SavedStateHandle propose maintenant une API getStateFlow() qui renvoie un StateFlow Kotlin pour surveiller les modifications de valeur au lieu d'utiliser LiveData.

  • ViewModel CreationExtras : lors de l'écriture d'un ViewModelProvider.Factory personnalisé, il n'est plus nécessaire d'étendre AndroidViewModelFactory ou AbstractSavedStateViewModelFactory pour accéder à Application ou à SavedStateHandle, respectivement. En revanche, ces champs sont fournis à chaque sous-classe de ViewModelProvider.Factory en tant que CreationExtras via la nouvelle surcharge de create : create(Class<T>, CreationExtras). Ces éléments supplémentaires sont fournis automatiquement par votre activité ou fragment lorsque vous utilisez respectivement les champs Activité 1.5.0 et Fragment 1.5.0.

    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-viewmodel fournit désormais un DSL viewModelFactory Kotlin qui vous permet de définir votre ViewModelProvider.Factory en fonction d'un ou de plusieurs initialiseurs lambda, un pour chaque classe ViewModel compatible avec votre fabrique personnalisée, à l'aide de CreationExtras comme source de données principale.

    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-compose propose maintenant une API viewModel() qui nécessite une fabrique lambda pour créer une instance ViewModel sans créer de ViewModelProvider.Factory personnalisé.

    // 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)
    }
    
  • Intégration de l'économiseur Compose SavedStateHandle : l'artefact lifecycle-viewmodel-compose contient désormais de nouvelles API expérimentales dans SavedStateHandle.saveable qui permettent à rememberSaveable d'utiliser un comportement reposant sur le SavedStateHandle d'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) }
    }
    
  • Ajout d'une API addCloseable() et d'une surcharge de constructeur qui vous permet d'ajouter un ou plusieurs objets Closeable au ViewModel, qui seront clôturés lorsque ViewModel sera effacé sans nécessiter de travail manuel dans onCleared().

    Par exemple, pour créer un niveau d'accès de coroutine que vous pouvez injecter dans un ViewModel, mais que vous pouvez contrôler via un test, vous pouvez créer un CoroutineScope qui implémente Closeable :

    class CloseableCoroutineScope(
        context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate
    ) : Closeable, CoroutineScope {
        override val coroutineContext: CoroutineContext = context
        override fun close() {
            coroutineContext.cancel()
       }
    }
    

    Vous pouvez ensuite utiliser ceci dans votre constructeur ViewModel tout en conservant la même durée de vie que viewModelScope :

    class TestScopeViewModel(
        val customScope: CloseableCoroutineScope = CloseableCoroutineScope()
    ) : ViewModel(customScope) {
        // You can now use customScope in the same way as viewModelScope
    }
    

Nouveaux comportements

  • Toute tentative de déplacement de Lifecycle.State de INITIALIZED vers DESTROYED génère désormais systématiquement un IllegalStateException, que le Lifecycle soit associé à un observateur ou non.
  • LifecycleRegistry efface maintenant ses observateurs lorsqu'ils atteignent l'état DESTROYED.

Version 2.5.0-rc02

15 juin 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-rc02. Liste des commits de la version 2.5.0-rc02

Correction de bugs

  • ViewModelProvider ne plante plus lors du mélange de versions antérieures de dépendances Lifecycle compileOnly avec des versions équivalentes ou supérieures à 2.5. (I81a66, b/230454566)

Version 2.5.0-rc01

11 mai 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-rc01. Liste des commits de la version 2.5.0-rc01.

Correction de bugs

  • MediatorLiveData.addSource() génère désormais une exception NullPointerException lorsqu'une source null est transmise au lieu de propager la source null aux observateurs. (Ibd0fb, b/123085232)

Version 2.5.0-beta01

20 avril 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-beta01. Liste des commits de la version 2.5.0-beta01.

Modifications apportées à l'API

  • Ajout de délégués de propriété SavedStateHandle.saveable pour utiliser des noms de propriété comme clés pour l'état persistant dans SavedStateHandle. (I8bb86, b/225014345)

Correction de bugs

  • L'imbrication d'un NavHost dans un autre NavHost au sein d'un onglet de navigation inférieure non primaire entraînait une exception IllegalStateException en cas d'utilisation de plusieurs piles "Retour". Ce problème a été résolu. (I11bd5, b/228865698)

Version 2.5.0-alpha06

6 avril 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-alpha06. Liste des commits de la version 2.5.0-alpha06.

Nouvelles fonctionnalités

  • Ajout d'une surcharge expérimentale MutableState à SavedStateHandle.saveable pour refléter rememberSaveable. (I38cfe, b/224565154)

Modifications apportées à l'API

  • CreationExtras est désormais abstrait au lieu d'être scellé. (Ib8a7a)

Correction de bugs

  • Correction d'une erreur IllegalStateException: Already attached to lifecycleOwner causée par SavedStateHandleController. (I7ea47, b/215406268)

Version 2.5.0-alpha05

23 mars 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-alpha05. Liste des commits de la version 2.5.0-alpha05.

Nouvelles fonctionnalités

  • Le module lifecycle-viewmodel-compose fournit désormais SavedStateHandleSaver, une API expérimentale qui garantit que les valeurs de SavedStateHandle sont intégrées correctement avec le même état d'instance enregistré que celui utilisé par rememberSaveable. (Ia88b7, b/195689777)

Modifications apportées à l'API

  • Correction d'un problème de compatibilité entre Lifecycle 2.3 et les versions plus récentes de Lifecycle en Java. (I52c8a, b/219545060)

Correction de bugs

  • SavedStateViewFactory est désormais compatible avec CreationExtras, même lorsqu'ils ont été initialisés avec un SavedStateRegistryOwner. Les arguments initialisés sont ignorés si des éléments supplémentaires sont fournis. (I6c43b, b/224844583)

Version 2.5.0-alpha04

9 mars 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-alpha04. Liste des commits de la version 2.5.0-alpha04.

Modifications apportées à l'API

  • SavedStateHandle propose maintenant une API getStateFlow() qui renvoie un StateFlow Kotlin pour surveiller les modifications de valeur au lieu d'utiliser LiveData. (Iad3ab, b/178037961)

Version 2.5.0-alpha03

23 février 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-alpha03. Liste des commits de la version 2.5.0-alpha03.

Nouvelles fonctionnalités

  • Ajout d'une API addCloseable() et d'une surcharge de constructeur qui vous permet d'ajouter un ou plusieurs objets Closeable au ViewModel, qui seront clôturés lorsque ViewModel sera effacé sans nécessiter de travail manuel dans onCleared(). (I55ea0)
  • lifecycle-viewmodel fournit désormais un InitializerViewModelFactory qui vous permet d'ajouter un lambda pour traiter des classes ViewModel particulières, en utilisant CreationExtras comme source de données principale. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose propose maintenant une API viewModel() qui nécessite une fabrique lambda pour créer une instance ViewModel sans créer de ViewModelProvider.Factory personnalisé. (I97fbb, b/216688927)

Modifications apportées à l'API

  • Vous pouvez maintenant créer un ViewModel avec CreationExtras via lifecycle-viewmodel-compose. (I08887, b/216688927)

Nouveaux comportements

  • Toute tentative de déplacement de Lifecycle.State de INITIALIZED vers DESTROYED génère désormais systématiquement un IllegalStateException, que le Lifecycle soit associé à un observateur ou non. (I7c390, b/177924329)
  • LifecycleRegistry efface maintenant ses observateurs lorsqu'ils atteignent l'état DESTROYED. (I4f8dd, b/142925860)

Version 2.5.0-alpha02

9 février 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-alpha02. Liste des commits de la version 2.5.0-alpha02.

Modifications apportées à l'API

  • SavedStateHandle et SavedStateViewModelFactory ont été convertis en Kotlin. Cela a amélioré la possibilité de valeur nulle des éléments génériques pour les deux classes. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Le paramètre de fonction LiveData switchMap peut désormais avoir une sortie pouvant être une valeur nulle. (I40396, b/132923666)
  • Les extensions LiveData -ktx sont désormais annotées avec @CheckResult pour s'assurer que le résultat est utilisé lors de l'appel de ces fonctions. (Ia0f05, b/207325134)

Nouveaux comportements

  • SavedStateHandle stocke désormais correctement la valeur defaultValue lorsqu'il n'existe aucune valeur pour la clé spécifiée. (I1c6ce, b/178510877)

Correction de bugs

  • Dans Lifecycle 2.4.1, nous avons mis à jour lifecycle-process pour qu'il dépende de Startup 1.1.1 afin de garantir que les corrections qui empêchent ProcessLifecycleInitializer de générer une exception StartupException soient disponibles par défaut. (Ib01df, b/216490724)
  • Amélioration du message d'erreur s'affichant lorsque les classes AndroidViewModel personnalisées comportent des paramètres dans le mauvais ordre et tentent de créer un ViewModel. (I340f7, b/177667711)
  • Vous pouvez désormais créer un modèle de vue via CreationExtras à l'aide de AndroidViewModelFactory sans définir d'application. (I6ebef, b/217271656)

Version 2.5.0-alpha01

26 janvier 2022

Publication d'androidx.lifecycle:lifecycle-*:2.5.0-alpha01. Liste des commits de la version 2.5.0-alpha01.

CreationExtras pour ViewModel

Avec cette version, nous allons jeter les bases de la restructuration de la manière dont un ViewModel est construit. Au lieu d'un ensemble rigide de sous-classes de ViewModelProvider.Factory, qui ajoutent des fonctionnalités supplémentaires (autorisant un paramètre de constructeur Application via AndroidViewModelFactory, ce qui lance un paramètre de constructeur SavedStateHandle via SavedStateViewModelFactory et AbstractSavedStateViewModelFactory, etc.), nous évoluons vers un monde de fabriques sans état qui s'appuient sur un nouveau concept, CreationExtras. (Ia7343, b/188691010, b/188541057)

Avec cette modification, ViewModelProvider n'effectue plus d'appels directs vers la méthode create(Class<T>) précédente de ViewModelProvider.Factory. Au lieu de cela, l'appel est sur une nouvelle surcharge de create : create(Class<T>, CreationExtras). Cela signifie que toute implémentation directe de l'instance ViewModelProvider.Factory a désormais accès à chacun de ces nouveaux CreationExtras :

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY : ce String fournit un accès à la clé personnalisée que vous avez transmise à ViewModelProvider.get().
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY permet d'accéder à la classe Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY permet d'accéder au SavedStateRegistryOwner utilisé pour construire ce ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY permet d'accéder au ViewModelStoreOwner utilisé pour construire ce ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY permet d'accéder au Bundle des arguments à utiliser pour construire un SavedStateHandle.

Ces éléments supplémentaires sont fournis par défaut lorsque vous utilisez Activity 1.5.0-alpha01, Fragment 1.5.0-alpha01 et Navigation 2.5.0-alpha01. Si vous utilisez une version antérieure de ces bibliothèques, votre CreationExtras sera vide. Toutes les sous-classes existantes de ViewModelProvider.Factory ont été réécrites pour prendre en charge l'ancien chemin de création utilisé par les versions antérieures de ces bibliothèques ainsi que le chemin CreationExtras qui sera utilisé par la suite.

Ces CreationExtras vous permettent de construire un ViewModelProvider.Factory qui ne transmet que les informations dont vous avez besoin à chaque ViewModel, sans s'appuyer sur une hiérarchie stricte des sous-classes de fabrique :

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

Nous utilisons la fonction d'extension createSavedStateHandle() en Kotlin sur CreationExtras à partir de SavedStateHandleSupport pour construire un SavedStateHandle uniquement pour le ViewModel qui en a besoin. (Ia6654, b/188541057)

Des CreationExtras personnalisés peuvent être fournis en forçant getDefaultViewModelCreationExtras() sur votre ComponentActivity ou Fragment, ce qui les rend disponibles dans votre ViewModelProvider.Factory personnalisé sous la forme d'une injection assistée. Ces éléments supplémentaires seront automatiquement disponibles pour votre fabrique personnalisée lorsqu'elles seront utilisées directement avec ViewModelProvider ou avec les extensions de propriété Kotlin by viewModels() et by activityViewModels(). (I79f2b, b/207012584, b/207012585, b/207012490)

Correction de bugs

  • Correction d'un problème qui entraînait la réapparition de la valeur par défaut fournie à un SavedStateHandle après la mort du processus et sa recréation, même si elle était spécifiquement supprimée de SavedStateHandle. Par conséquent, SavedStateHandle ne fusionnera plus les valeurs par défaut avec les valeurs restaurées, mais utilisera uniquement les valeurs restaurées comme source fiable. (I53a4b)

Version 2.4

Version 2.4.1

9 février 2022

Publication d'androidx.lifecycle:lifecycle-*:2.4.1. Liste des commits de la version 2.4.1

Correction de bugs

  • Rétroportage de Lifecycle 2.5.0-alpha01 : correction d'un problème qui entraînait la réapparition de la valeur par défaut fournie à un SavedStateHandle après la mort du processus et sa recréation, même si elle était spécifiquement supprimée de SavedStateHandle. Par conséquent, SavedStateHandle ne fusionnera plus les valeurs par défaut avec les valeurs restaurées, mais utilisera uniquement les valeurs restaurées comme source fiable. (I53a4b)
  • lifecycle-process dépend désormais d'Androidx Startup 1.1.1, qui a corrigé une régression dans laquelle l'utilisation de ProcessLifecycleInitializer entraînait une exception StartupException. (b/216490724)

Version 2.4.0

27 octobre 2021

Publication d'androidx.lifecycle:lifecycle-*:2.4.0. Liste des commits de la version 2.4.0.

Changements importants depuis la version 2.3.0

  • Abandon d'@OnLifecycleEvent. Utilisez LifecycleEventObserver ou DefaultLifecycleObserver à la place.
  • Ajout de la bibliothèque androidx.lifecycle:lifecycle-viewmodel-compose. Elle fournit un composable viewModel() et LocalViewModelStoreOwner.
    • Modification destructive pour la source : ViewModelProvider a été réécrit en Kotlin. La méthode ViewModelProvider.Factory.create n'autorise plus les éléments génériques pouvant être nuls.
  • Des API de coroutines ont été ajoutées à androidx.lifecycle:lifecycle-runtime-ktx :
  • Lifecycle.repeatOnLifecycle, une API qui exécute un bloc de code dans une coroutine lorsque le cycle de vie est au moins dans un certain état. Le bloc est annulé, puis relancé à mesure que le cycle de vie passe à l'état cible.
  • Flow.flowWithLifecycle, une API qui émet des valeurs à partir du flux en amont lorsque le cycle de vie est au moins dans un certain état.
  • DefaultLifecycleObserver a été déplacé de lifecycle.lifecycle-common-java8 vers lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8 n'offre plus de fonctionnalités supplémentaires en plus de lifecycle.lifecycle-common, sa dépendance peut donc être remplacée par lifecycle.lifecycle-common.
  • Des API qui ne sont pas des API de coroutines ont été déplacées de lifecycle-viewmodel-ktx vers le module lifecycle-viewmodel.
  • lifecycle-process utilise désormais androidx.startup pour initialiser ProcessLifecycleOwner.

    Auparavant, cette initialisation était réalisée par androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Si vous utilisiez tools:node="remove" sur ContentProvider pour initialiser le cycle de vie des processus par le passé, vous devez maintenant procéder comme suit.

     <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>
    

    (ou)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Version 2.4.0-rc01

29 septembre 2021

Publication d'androidx.lifecycle:lifecycle-*:2.4.0-rc01 sans aucune modification par rapport à Lifecycle 2.4.0-beta01. Liste des commits de la version 2.4.0-rc01.

Version 2.4.0-beta01

15 septembre 2021

Publication d'androidx.lifecycle:lifecycle-*:2.4.0-beta01. Liste des commits de la version 2.4.0-beta01

Modifications apportées à l'API

  • Abandon d'@OnLifecycleEvent. Utilisez LifecycleEventObserver ou DefaultLifecycleObserver à la place. (I5a8fa)
  • DefaultLifecycleObserver a été déplacé de androidx.lifecycle.lifecycle-common-java8 vers androidx.lifecycle.lifecycle-common. androidx.lifecycle.lifecycle-common-java8 n'offre plus de fonctionnalités supplémentaires en plus de androidx.lifecycle.lifecycle-common, sa dépendance peut donc être remplacée par androidx.lifecycle.lifecycle-common. (I021aa)
  • Des API qui ne sont pas des API de coroutines ont été déplacées de lifecycle-viewmodel-ktx vers le module lifecycle-viewmodel. (I6d5b2)

Contribution externe

  • Nous remercions dmitrilc pour la correction d'une faute de frappe dans la documentation sur ViewModel. (#221)

Version 2.4.0-alpha03

4 août 2021

Publication d'androidx.lifecycle:lifecycle-*:2.4.0-alpha03. Liste des commits de la version 2.4.0-alpha03

Modifications apportées à l'API

  • Modification destructive pour la source : ViewModelProvider a été réécrit en Kotlin. La méthode ViewModelProvider.Factory.create n'autorise plus les éléments génériques pouvant être nuls. (I9b9f6)

Nouveaux comportements

  • Lifecycle.repeatOnLifecycle : block est désormais toujours appelé en série lors de l'exécution répétée. (Ibab33)

Contribution externe

  • Merci à chao2zhang d'avoir corrigé les extraits de code dans la documentation sur repeatOnLifecycle. #205.

Version 2.4.0-alpha02

16 juin 2021

Publication d'androidx.lifecycle:lifecycle-*:2.4.0-alpha02. Liste des commits de la version 2.4.0-alpha02.

Nouvelles fonctionnalités

  • Ajout d'une vérification lint RepeatOnLifecycleWrongUsage dans lifecycle-runtime-ktx, qui détecte si repeateOnLifecycle est utilisé de manière incorrecte dans onStart() ou onResume(). (706078, b/187887400)

Modifications apportées à l'API

  • L'API LifecycleOwner.addRepeatingJob est supprimée au profit de Lifecycle.repeatOnLifecycle, qui respecte la simultanéité structurée et est plus facile à comprendre. (I4a3a8)
  • ProcessLifecycleInitializer a été rendu public afin que d'autres androidx.startup.Initializer puissent l'utiliser en tant que dépendances. (I94c31)

Correction de bugs

  • Correction d'un problème lié à la vérification lint NullSafeMutableLiveData lorsque le champ contenait des modificateurs. (#147, b/183696616)
  • Correction d'un autre problème lié à la vérification lint NullSafeMutableLiveData lors de l'utilisation d'éléments génériques. (#161, b/184830263)

Contribution externe

Version 2.4.0-alpha01

24 mars 2021

Publication d'androidx.lifecycle:lifecycle-*:2.4.0-alpha01. Liste des commits de la version 2.4.0-alpha01.

Nouveaux comportements

  • lifecycle-process utilise désormais androidx.startup pour initialiser ProcessLifecycleOwner.

    Auparavant, cette initialisation était réalisée par androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Si vous utilisiez tools:node="remove" sur ContentProvider pour initialiser le cycle de vie des processus par le passé, vous devez maintenant procéder comme suit.

     <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>
    

    (ou)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Modifications apportées à l'API

  • Ajout d'une API Flow.flowWithLifecycle qui émet des valeurs à partir du flux en amont lorsque le cycle de vie est au moins dans un certain état à l'aide de l'API Lifecycle.repeatOnLifecycle. Il s'agit d'une alternative à la nouvelle API LifecycleOwner.addRepeatinJob. (I0f4cd)

Correction de bugs

  • Pour Lifecycle 2.3.1 : la règle lint NonNullableMutableLiveData peut désormais différencier correctement les variables de champ dont les valeurs pouvant être nulles ne sont pas les mêmes. (b/169249668)

Lifecycle Viewmodel Compose version 1.0.0

Version 1.0.0-alpha07

16 juin 2021

Publication d'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07. Liste des commits de la version 1.0.0-alpha07.

Modifications destructives de l'API

  • viewModel() reçoit maintenant désormais un ViewModelStoreOwner facultatif, ce qui facilite la collaboration avec d'autres propriétaires que LocalViewModelStoreOwner. Par exemple, vous pouvez maintenant utiliser viewModel(navBackStackEntry) pour récupérer un ViewModel associé à un graphique de navigation particulier. (I2628d, b/188693123)

Version 1.0.0-alpha06

2 juin 2021

Publication d'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06. Liste des commits de la version 1.0.0-alpha06.

Mise à jour pour assurer la compatibilité avec la version 1.0.0-beta08 de Compose.

Version 1.0.0-alpha05

18 mai 2021

Publication d'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05. Liste des commits de la version 1.0.0-alpha05.

Nouvelles fonctionnalités

  • Mise à jour pour assurer la compatibilité avec la version 1.0.0-beta07 de Compose.

Correction de bugs

  • Prise en charge dans Android 12 des fichiers AndroidManifest provenant de ui-test-manifest et de ui-tooling-data. (I6f9de, b/184718994)

Version 1.0.0-alpha04

7 avril 2021

Publication d'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04. Liste des commits de la version 1.0.0-alpha04.

Modifications de la dépendance

  • Cette version permet à androidx.hilt:hilt-navigation-compose et androidx.navigation:navigation-compose de synchroniser les dépendances sur androidx.compose.compiler:compiler:1.0.0-beta04 et androidx.compose.runtime:runtime:1.0.0-beta04. Pour la version 1.0.0, le compilateur et l'environnement d'exécution doivent correspondre.

Version 1.0.0-alpha03

10 mars 2021

Publication d'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03. Liste des commits de la version 1.0.0-alpha03

Modifications apportées à l'API

  • LocalViewModelStoreOwner.current affiche désormais un objet ViewModelStoreOwner pouvant être nul pour mieux déterminer si un objet ViewModelStoreOwner est disponible dans la composition actuelle. Les API qui nécessitent un ViewModelStoreOwner, tels que viewModel() et NavHost, génèrent quand même une exception si aucun élément ViewModelStoreOwner n'est défini. (Idf39a)

Lifecycle-Viewmodel-Compose version 1.0.0-alpha02

24 février 2021

Publication d'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02. Liste des commits de la version 1.0.0-alpha02.

Modifications apportées à l'API

  • LocalViewModelStoreOwner dispose désormais d'une fonction provides pouvant être utilisée avec CompositionLocalProvider, en remplacement de l'API asProvidableCompositionLocal(). (I45d24)

Lifecycle-Viewmodel-Compose version 1.0.0-alpha01

10 février 2021

Publication d'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01. Liste des commits de la version 1.0.0-alpha01

Nouvelles fonctionnalités

  • Le composable viewModel() et LocalViewModelStoreOwner ont été déplacés de androidx.compose.ui.viewinterop vers cet artefact dans le package androidx.lifecycle.viewmodel.compose. (I7a374)

Version 2.3.1

Lifecycle version 2.3.1

24 mars 2021

Publication d'androidx.lifecycle:lifecycle-*:2.3.1. Liste des commits de la version 2.3.1.

Correction de bugs

  • La règle lint NonNullableMutableLiveData peut désormais différencier correctement les variables de champ dont les valeurs pouvant être nulles ne sont pas les mêmes. (b/169249668)

Version 2.3.0

Version 2.3.0

10 février 2021

Publication d'androidx.lifecycle:lifecycle-*:2.3.0. Liste des commits de la version 2.3.0

Principales modifications depuis la version 2.2.0

  • Prise en charge de SavedStateHandle avec les classes non parcelables : SavedStateHandle prend désormais en charge la sérialisation différée, ce qui vous permet d'appeler setSavedStateProvider() pour une clé donnée, en fournissant un SavedStateProvider qui reçoit un rappel à saveState() lorsque SavedStateHandle est invité à enregistrer son état. Consultez la section Enregistrer des classes non parcelables.
  • Application du comportement du cycle de vie :
    • LifecycleRegistry applique maintenant DESTROYED en tant qu'état final.
    • LifecycleRegistry vérifie maintenant que ses méthodes sont appelées sur le thread principal. Il s'agissait d'une exigence pour les cycles de vie des activités, des fragments, etc. L'ajout d'observateurs provenant de threads autres que le principal générait des plantages difficiles à détecter lors de l'exécution. Pour les objets LifecycleRegistry appartenant à vos propres composants, vous pouvez désactiver explicitement les vérifications à l'aide de LifecycleRegistry.createUnsafe(...), mais vous devez ensuite vous assurer qu'une synchronisation appropriée est effectuée lorsque vous accédez à LifecycleRegistry depuis différents threads.
  • Assistants d'état et d'événement de cycle de vie : ajout de méthodes d'assistance statiques downFrom(State), downTo(State), upFrom(State) et upTo(State) à Lifecycle.Event pour générer un Event en fonction d'un State et d'une direction de transition. Ajout de la méthode getTargetState(), qui fournit le State auquel le cycle de vie passera directement après un Event.
  • withStateAtLeast : ajout des API Lifecycle.withStateAtLeast qui attendent un état de cycle de vie et exécutent un bloc de code sans suspension de manière synchrone au moment du changement d'état, puis reprennent avec le résultat. Ces API diffèrent des méthodes when* existantes, car elles n'autorisent pas l'exécution du code de suspension et n'utilisent pas de coordinateur personnalisé. (aosp/1326081)
  • API ViewTree : les nouvelles API ViewTreeLifecycleOwner.get(View) et ViewTreeViewModelStoreOwner.get(View) vous permettent respectivement de récupérer les LifecycleOwner et les ViewModelStoreOwner associés à une instance View. Vous devez passer à Activity 1.2.0, Fragment 1.3.0 et AppCompat 1.3.0-alpha01 ou versions ultérieures pour renseigner ces éléments correctement. Les extensions Kotlin findViewTreeLifecycleOwner et findViewTreeViewModelStoreOwner sont respectivement disponibles dans lifecycle-runtime-ktx et lifecycle-viewmodel-ktx.
  • Abandon de l'extension Kotlin LiveData.observe() : l'extension Kotlin LiveData.observe() nécessaire pour utiliser la syntaxe lambda est désormais obsolète, car elle n'est plus requise à compter de Kotlin 1.4.

Version 2.3.0-rc01

16 décembre 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-rc01. Liste des commits de la version 2.3.0-rc01

Correction de bugs

  • La méthode keys() de SavedStateHandle est désormais cohérente avant et après l'enregistrement de l'état. Elle inclut désormais les clés déjà utilisées avec setSavedStateProvider(), en plus de celles utilisées avec set() et getLiveData(). (aosp/1517919, b/174713653)

Contribution externe

Version 2.3.0-beta01

1er octobre 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-beta01. Liste des commits de la version 2.3.0-beta01.

Modifications apportées à l'API

  • L'extension Kotlin LiveData.observe() nécessaire pour utiliser la syntaxe lambda est désormais obsolète, car elle n'est plus requise à compter de Kotlin 1.4. (I40d3f)

Correction de bugs

Modifications de la documentation

  • Le compilateur liveData et la documentation asLiveData() ont été mis à jour pour inclure des détails sur la modification des valeurs de délai d'expiration fournies. (aosp/1122324)

Version 2.3.0-alpha07

19 août 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-alpha07. Liste des commits de la version 2.3.0-alpha07.

Correction de bugs

  • Correction d'un problème de plantage lié à la vérification lint NullSafeMutableLiveData. (aosp/1395367)

Version 2.3.0-alpha06

22 juillet 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-alpha06. Liste des commits de la version 2.3.0-alpha06.

Nouvelles fonctionnalités

  • Ajout des méthodes d'assistance statiques downFrom(State), downTo(State), upFrom(State) et upTo(State) à Lifecycle.Event pour générer un Event en fonction d'un State et d'une direction de transition. Ajout de la méthode getTargetState(), qui fournit le State auquel le cycle de vie passera directement après un Event. (I00887)
  • Ajout des API Lifecycle.withStateAtLeast qui attendent un état de cycle de vie et exécutent un bloc de code sans suspension de manière synchrone au moment du changement d'état, puis reprennent avec le résultat. Ces API diffèrent des méthodes when* existantes, car elles n'autorisent pas l'exécution du code de suspension et n'utilisent pas de coordinateur personnalisé. (aosp/1326081)

Nouveaux comportements

  • LifecycleRegistry applique maintenant DESTROYED en tant qu'état final. (I00887)
  • LifecycleRegistry vérifie maintenant que ses méthodes sont appelées sur le thread principal. Il s'agissait d'une exigence pour les cycles de vie des activités, des fragments, etc. L'ajout d'observateurs provenant de threads autres que le principal générait des plantages difficiles à détecter lors de l'exécution. Pour les objets LifecycleRegistry appartenant à vos propres composants, vous pouvez désactiver explicitement les vérifications à l'aide de LifecycleRegistry.createUnsafe(...), mais vous devez ensuite vous assurer qu'une synchronisation appropriée est effectuée lorsque vous accédez à LifecycleRegistry depuis différents threads. (Ie7280, b/137392809)

Correction de bugs

  • Correction d'un plantage dans NullSafeMutableLiveData. (b/159987480)
  • Correction d'un ObsoleteLintCustomCheck pour les vérifications lint regroupées avec lifecycle-livedata-core-ktx (et NullSafeMutableLiveData plus précisément). (b/158699265)

Version 2.3.0-alpha05

24 juin 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-alpha05. Liste des commits de la version 2.3.0-alpha05.

Correction de bugs

  • LiveData gère désormais plus efficacement les cas réentrants, évitant ainsi les appels en double à onActive() ou onInactive(). (b/157840298)
  • Les vérifications lint ne s'exécutaient pas avec Android Studio 4.1 Canary 6 ou version ultérieure. Ce problème a été résolu. (aosp/1331903)

Version 2.3.0-alpha04

10 juin 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-alpha04. Liste des commits de la version 2.3.0-alpha04.

Correction de bugs

  • Correction d'un problème de plantage lié à la vérification lint NonNullableMutableLiveData. (b/157294666)
  • La vérification lint NonNullableMutableLiveData couvre désormais beaucoup plus de cas où une valeur null a été définie sur un MutableLiveData avec un paramètre de type non nul. (b/156002218)

Version 2.3.0-alpha03

20 mai 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-alpha03. Liste des commits de la version 2.3.0-alpha03.

Nouvelles fonctionnalités

  • SavedStateHandle prend désormais en charge la sérialisation différée en vous permettant d'appeler setSavedStateProvider() pour une clé donnée, en fournissant un SavedStateProvider qui reçoit un rappel à saveState() lorsque SavedStateHandle est invité à enregistrer son état. (b/155106862)
  • Une nouvelle API ViewTreeViewModelStoreOwner.get(View) vous permet de récupérer le conteneur ViewModelStoreOwner en fonction d'une instance View. Vous devez passer à Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 et AppCompat 1.3.0-alpha01 pour renseigner ces éléments correctement. Une extension Kotlin findViewModelStoreOwner() a été ajoutée à lifecycle-viewmodel-ktx. (aosp/1295522)

Correction de bugs

  • Les vérifications lint de MutableLiveData publiées dans Lifecycle 2.3.0-alpha01 n'étaient pas publiées avec l'artefact lifecycle-livedata-core-ktx. Ce problème a été résolu. (b/155323109)

Version 2.3.0-alpha02

29 avril 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-alpha02. Liste des commits de la version 2.3.0-alpha02.

Modifications apportées à l'API

  • SavedStateViewModelFactory vous permet désormais de transmettre un Application nul à son constructeur afin de mieux prendre en charge les cas où cette valeur n'est pas facilement disponible et que la prise en charge pour AndroidViewModel n'est pas nécessaire. (aosp/1285740)

Correction de bugs

  • Amélioration des performances de démarrage à froid en évitant l'échec de la validation de la classe sur les appareils utilisant un niveau d'API de 28 ou inférieur. (aosp/1282118)

Version 2.3.0-alpha01

4 mars 2020

Publication d'androidx.lifecycle:lifecycle-*:2.3.0-alpha01. Liste des commits de la version 2.3.0-alpha01

Nouvelles fonctionnalités

  • Une nouvelle API ViewTreeLifecycleOwner.get(View) vous permet de récupérer le conteneur LifecycleOwner en fonction d'une instance View. Vous devez passer à Activity 1.2.0-alpha01 et Fragment 1.3.0-alpha01 pour renseigner ces éléments correctement. Une extension Kotlin findViewTreeLifecycleOwner est également disponible dans lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Ajout d'une vérification lint qui vous avertit lorsque vous définissez une valeur null sur MutableLiveData et que celui-ci est défini en Kotlin comme n'ayant pas une valeur nulle. Cette option est disponible lorsque vous utilisez les artefacts livedata-core-ktx ou livedata-ktx. (aosp/1154723, aosp/1159092)
  • Un nouvel artefact lifecycle-runtime-testing est disponible. Il fournit TestLifecycleOwner, qui implémente LifecycleOwner et fournit un Lifecycle modifiable thread-safe. (aosp/1242438)

Correction de bugs

  • L'artefact lifecycle-runtime possède désormais un nom de package unique. (aosp/1187196)

Version 2.2.0

ViewModel-Savedstate version 2.2.0

5 février 2020

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0. Liste des commits de la version 2.2.0.

Lifecycle ViewModel SavedState partage désormais la même version que les autres artefacts Lifecycle. Le comportement de la version 2.2.0 est identique à celui de 1.0.0.

Version 2.2.0

22 janvier 2020

Publication d'androidx.lifecycle:lifecycle-*:2.2.0. Liste des commits de la version 2.2.0.

Changements importants depuis la version 2.1.0

  • Intégration de la coroutine Lifecycle : le nouvel artefact lifecycle-runtime-ktx ajoute l'intégration entre les coroutines Lifecycle et Kotlin. lifecycle-livedata-ktx a également été développé pour exploiter les coroutines. Pour en savoir plus, consultez la section Utiliser des coroutines Kotlin avec des composants d'architecture.
  • Abandon de ViewModelProviders.of() : ViewModelProviders.of() est maintenant obsolète. Vous pouvez transmettre un Fragment ou un FragmentActivity au nouveau constructeur ViewModelProvider(ViewModelStoreOwner) pour obtenir la même fonctionnalité que lorsque vous utilisez Fragment 1.2.0.
  • Abandon de l'artefact lifecycle-extensions : avec l'abandon de ViewModelProviders.of() ci-dessus, cette version marque l'abandon de la dernière API dans lifecycle-extensions. Cet artefact doit maintenant être considéré comme obsolète dans son intégralité. Nous vous recommandons vivement d'utiliser les artefacts Lifecycle dont vous avez besoin (par exemple, lifecycle-service si vous utilisez LifecycleService et lifecycle-process si vous utilisez ProcessLifecycleOwner) plutôt que lifecycle-extensions, car il n'y aura pas de version 2.3.0 de lifecycle-extensions.
  • Processeur d'annotations incrémentiel Gradle : le processeur d'annotations de Lifecycle est incrémentiel par défaut. Si votre application est écrite dans le langage de programmation Java 8, vous pouvez utiliser DefautLifecycleObserver à la place. Si elle est écrite en Java 7, vous pouvez utiliser LifecycleEventObserver.

Version 2.2.0-rc03

4 décembre 2019

Publication d'androidx.lifecycle:lifecycle-*:2.2.0-rc03. Liste des commits de la version 2.2.0-rc03

Correction de bugs

  • Correction d'une erreur survenant lorsqu'une simulation de ViewModel était stockée dans ViewModelStore, puis interrogée avec la fabrique par défaut.
  • Correction de l'utilisation de Dispatchers.Main.immediate dans launchWhenCreated et d'autres méthodes similaires pour qu'elles soient appelées de manière synchrone lors de l'événement de cycle de vie correspondant. (aosp/1156203)

Contributions externes

  • Merci à Anders Järleberg pour sa contribution à cette correction ! (aosp/1156203)
  • Merci à Vsevolod Tolstopyatov de JetBrains pour avoir vérifié l'implémentation d'une exécution intégrée.

Modifications de la dépendance

  • Lifecycle Extensions dépend désormais de Fragment 1.2.0-rc03.

Version 2.2.0-rc02

7 novembre 2019

Publication d'androidx.lifecycle:lifecycle-*:2.2.0-rc02. Liste des commits de la version 2.2.0-rc02.

Correction de bugs

  • Correction d'un bug dans la configuration ProGuard de la bibliothèque qui affectait les appareils reposant sur l'API 28 ou version ultérieure si l'API cible est inférieure à 29. (b/142778206)

Version 2.2.0-rc01

23 octobre 2019

Publication d'androidx.lifecycle:lifecycle-*:2.2.0-rc01. Liste des commits de la version 2.2.0-rc01.

Correction de bugs

  • launchWhenCreated et les méthodes associées s'exécutaient une image plus tard que la méthode de cycle de vie associée en raison de l'utilisation de Dispatchers.Main au lieu de Dispatchers.Main.immediate. Ce problème a été résolu. (aosp/1145596)

Contributions externes

  • Merci à Nicklas Ansman pour sa contribution à cette correction ! (aosp/1145596)

Version 2.2.0-beta01

9 octobre 2019

Publication d'androidx.lifecycle:lifecycle-*:2.2.0-beta01. Liste des commits de la version 2.2.0-beta01.

Correction de bugs

  • Correction d'une régression introduite dans Lifecycle 2.2.0-alpha05 dans l'ordre de ProcessLifecycleOwner et dans la modification de l'activité LifecycleOwner (passage à débuté et repris) sur les appareils Android 10. (aosp/1128132)
  • Correction d'une régression introduite dans Lifecycle 2.2.0-alpha05 qui entraînait une exception NullPointerException lors de l'utilisation de la version 2.0.0 ou 2.1.0 de lifecycle-process. (b/141536990)

Version 2.2.0-alpha05

18 septembre 2019

Publication d'androidx.lifecycle:lifecycle-*:2.2.0-alpha05. Liste des commits de la version 2.2.0-alpha05.

Correction de bugs

  • Correction d'une condition de concurrence dans le générateur de données en direct de coroutine. b/140249349

Version 2.2.0-alpha04

5 septembre 2019

Publication d'androidx.lifecycle:lifecycle-*:2.2.0-alpha04. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • lifecycleScope, whenCreated, whenStarted, whenResumed, viewModelScope et l'implémentation sous-jacente de liveData utilisent désormais Dispatchers.Main.immediate au lieu de Dispatchers.Main. (b/139740492)

Contributions externes

  • Merci à Nicklas Ansman pour sa contribution au passage à Dispatchers.Main.immediate ! (aosp/1106073)

Version 2.2.0-alpha03

7 août 2019

Publication d'androidx.lifecycle:lifecycle-*:2.2.0-alpha03. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

Modifications apportées à l'API

  • ViewModelProviders.of() est maintenant obsolète. Vous pouvez transmettre un Fragment ou un FragmentActivity au nouveau constructeur ViewModelProvider(ViewModelStoreOwner) pour obtenir le même résultat. (aosp/1009889)

Version 2.2.0-alpha02

2 juillet 2019

Publication d'androidx.lifecycle:*:2.2.0-alpha02. Les commits inclus dans cette version sont disponibles sur cette page.

Modifications apportées à l'API

  • Remplacement de LiveDataScope.initialValue par LiveDataScope.latestValue, qui permet de suivre la valeur émise actuellement pour le bloc liveData.
  • Ajout d'une nouvelle surcharge au compilateur liveData, qui reçoit le paramètre timeout de type Duration.

Version 2.2.0-alpha01

7 mai 2019

Publication d'androidx.lifecycle:*:2.2.0-alpha01. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Cette version propose de nouvelles fonctionnalités afin de prendre en charge les coroutines Kotlin pour Lifecycle et LiveData. Pour en savoir plus, consultez la documentation détaillée ici.

ViewModel-SavedState version 1.0.0

Version 1.0.0

22 janvier 2020

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0. Liste des commits de la version 1.0.0.

Fonctionnalités importantes de la version 1.0.0

  • La classe SavedStateHandle a été ajoutée. Elle permet à vos classes ViewModel d'accéder à l'état enregistré et d'y apporter une contribution. Cet objet peut être reçu dans le constructeur de la classe ViewModel et les fabriques fournies par défaut par Fragments. AppCompatActivity injectera automatiquement SavedStateHandle.
  • AbstractSavedStateViewModelFactory a été ajouté. Cet élément permet de créer des fabriques personnalisées pour votre ViewModel et de lui donner accès à SavedStateHandle.

ViewModel-Savedstate version 1.0.0-rc03

4 décembre 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03. Liste des commits de la version 1.0.0-rc03.

Modifications de la dépendance

  • Lifecycle ViewModel SavedState dépend désormais de Lifecycle 2.2.0-rc03.

Viewmodel-Savedstate version 1.0.0-rc02

7 novembre 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02. Liste des commits de la version 1.0.0-rc02

Modifications de la dépendance

  • Dépend désormais de Lifecycle 2.2.0-rc02.

ViewModel-SavedState version 1.0.0-rc01

23 octobre 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 sans aucune modification par rapport à la version 1.0.0-beta01. Liste des commits de la version 1.0.0-rc01.

ViewModel-Savedstate version 1.0.0-beta01

9 octobre 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Correction de bugs

  • Correction d'un problème qui provoquait une exception IllegalStateException lorsque vous accédiez pour la première fois à un SavedState ViewModel dans Activity.onActivityResult(). (b/139093676)
  • Correction d'une exception IllegalStateException lors de l'utilisation de AbstractSavedStateViewModelFactory. (b/141225984)

ViewModel-SavedState version 1.0.0-alpha05

18 septembre 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05. Liste des commits de la version 1.0.0-alpha05.

Modifications apportées à l'API

  • SavedStateViewModelFactory n'étend plus AbstractSavedStateViewModelFactory, et SavedStateHandle n'est créé que pour les ViewModels qui en font la demande. (aosp/1113593)

ViewModel-SavedState version 1.0.0-alpha03

7 août 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03. Les commits inclus dans cette version sont disponibles sur cette page.

Modifications destructives

ViewModel-SavedState version 1.0.0-alpha02

2 juillet 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Ajout d'une surcharge SavedStateHandle.getLiveData() qui accepte une valeur par défaut.

Modifications apportées à l'API

  • SavedStateVMFactory a été renommé SavedStateViewModelFactory.
  • AbstractSavedStateVMFactory a été renommé AbstractSavedStateViewModelFactory.

ViewModel-Savedstate version 1.0.0-alpha01

13 mars 2019

Publication d'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01. Le journal de commits complet de cette version initiale est disponible sur cette page.

Nouvelles fonctionnalités

  • ViewModels peut désormais contribuer à l'état enregistré. Pour ce faire, utilisez la nouvelle fabrique de ViewModel SavedStateVMFactory. Votre ViewModel doit avoir un constructeur qui reçoit l'objet SavedStateHandle en tant que paramètre.

Version 2.1.0

Changements importants depuis la version 2.0.0

  • Ajout de LifecycleEventObserver pour les cas où un flux d'événements de cycle de vie est nécessaire. Il s'agit d'une API publique au lieu d'une classe GenericLifecycleObserver masquée.
  • Ajout des extensions KTX pour les méthodes LiveData.observe et Transformations.*.
  • Ajout de Transformations.distinctUntilChanged, qui crée un objet LiveData qui n'émet pas de valeur tant que la valeur LiveData source n'a pas été modifiée.
  • Ajout de la prise en charge des coroutines dans les ViewModels en ajoutant la propriété d'extension ViewModel.viewModelScope.

Version 2.1.0

5 septembre 2019

Publication d'androidx.lifecycle:lifecycle-*:2.1.0. Les commits inclus dans cette version sont disponibles sur cette page.

Version 2.1.0-rc01

2 juillet 2019

Publication d'androidx.lifecycle:*:2.1.0-rc01 sans aucune modification par rapport à la version androidx.lifecycle:*:2.1.0-beta01. Les commits inclus dans cette version sont disponibles sur cette page.

Version 2.1.0-beta01

7 mai 2019

Publication d'androidx.lifecycle:*:2.1.0-beta01. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Les cycles de vie passent en version bêta. L'API a été introduite dans les versions alpha précédentes, telles que les fonctions d'extension liveData pour les transformations et les observations, l'initialisation de ViewModel avec délégation de propriété et d'autres éléments sont stabilisés et ne seront plus modifiés.

Version 2.1.0-alpha04

3 avril 2019

Publication d'androidx.lifecycle:*:2.1.0-alpha04. Les commits inclus dans cette version sont disponibles sur cette page.

Modifications apportées à l'API

  • Modification destructive : l'API sous-jacente de by viewModels() et de by activityViewModels() a été modifiée pour prendre en charge ViewModelStore directement, au lieu d'utiliser simplement ViewModelStoreOwner. (aosp/932932)

Version 2.1.0-alpha03

13 mars 2019

Publication d'androidx.lifecycle:*:2.1.0-alpha03. La liste complète des commits inclus dans cette version est disponible sur cette page.

Modifications apportées à l'API

  • ViewModelProvider.KeyedFactory a été supprimé. La deuxième interface, en plus de ViewModelProvider.Factory, n'était pas adaptée aux nouvelles fonctionnalités de délégation de propriété en Kotlin by viewmodels {}. (aosp/914133)

Version 2.1.0-alpha02

30 janvier 2019

Publication d'androidx.lifecycle 2.1.0-alpha02.

Modifications apportées à l'API

  • LifecycleRegistry contient désormais une méthode setCurrentState() qui remplace la méthode setState(), désormais obsolète. (aosp/880715)

Correction de bugs

  • Correction d'un problème qui entraînait le plantage des instances fictives ViewModel lorsque le conteneur ViewModelStore était effacé. b/122273087

Version 2.1.0-alpha01

17 décembre 2018

Publication d'androidx.lifecycle 2.1.0-alpha01.

Nouvelles fonctionnalités

  • Ajout de LifecycleEventObserver pour les cas où un flux d'événements de cycle de vie est nécessaire. Il s'agit d'une API publique au lieu d'une classe GenericLifecycleObserver masquée.
  • Ajout des extensions KTX pour les méthodes LiveData.observe et Transformations.*.
  • Ajout de la méthode Transformations.distinctUntilChanged. Elle crée un objet LiveData qui n'émet aucune valeur tant que la valeur LiveData source n'a pas été modifiée.
  • Prise en charge des coroutines dans les ViewModels : la propriété d'extension ViewModel.viewModelScope a été ajoutée.
  • Ajout de ViewModelProvider.KeyedFactory, une fabrique de ViewModels qui reçoit key et Class dans la méthode create.

Version 2.0.0

Version 2.0.0

21 septembre 2018

Publication de Lifecycle 2.0.0 avec une correction de bug de la version 2.0.0-rc01 dans ViewModel

Correction de bugs

  • Correction d'une règle ProGuard de ViewModel supprimant incorrectement des constructeurs. b/112230489

Version 2.0.0-beta01

2 juillet 2018

Correction de bugs

  • Correction d'une règle ProGuard de LifecycleObserver pour ne conserver que les implémentations, et non les sous-interfaces. b/71389427
  • Correction des règles ProGuard de ViewModel pour permettre l'obscurcissement et la minification.

Versions antérieures à AndroidX

Pour les versions de Lifecycle antérieures à AndroidX ci-dessous, incluez les dépendances suivantes :

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

Version 1.1.1

21 mars 2018

Un seul petit changement : android.arch.core.util.Function est déplacée de arch:runtime vers arch:common. Cela permet de l'utiliser sans dépendance d'exécution, par exemple dans paging:common ci-dessous.

lifecycle:common est une dépendance de lifecycle:runtime. Par conséquent, ce changement n'affecte pas lifecycle:runtime directement, uniquement les modules qui dépendent directement de lifecycle:common, comme Paging.

Version 1.1.0

22 janvier 2018

Modifications du packaging

De nouvelles dépendances bien plus petites sont désormais disponibles :

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

Modifications apportées à l'API

  • Les LifecycleActivity et LifecycleFragment obsolètes ont été supprimés. Veuillez utiliser FragmentActivity ou AppCompatActivity, ou assurez-vous que Fragment est compatible.
  • Ajout des annotations @NonNull à ViewModelProviders et ViewModelStores.
  • Abandon du constructeur ViewModelProviders. Veuillez utiliser ses méthodes statiques directement.
  • Abandon de ViewModelProviders.DefaultFactory. Veuillez utiliser ViewModelProvider.AndroidViewModelFactory.
  • Ajout de la méthode ViewModelProvider.AndroidViewModelFactory.getInstance(Application) statique pour récupérer une Factory statique adaptée à la création d'instances ViewModel et AndroidViewModel.