Lifecycle (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.7.0 - - 2.8.0-alpha03
lifecycle-viewmodel-compose 2.7.0 - - 2.8.0-alpha03
Dernière mise à jour de la bibliothèque: 20 mars 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.7.0"
        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.7.0"
        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.7.0"
        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.7.0"
        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.8

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 remplaçable, ce qui vous permet d'injecter votre propre coordinateur et SupervisorJob(), ou de remplacer la valeur par défaut à l'aide du 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é multiplateforme Kotlin

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

Pour tenir compte de ce changement, des méthodes telles que celles de ViewModelProvider qui prenaient une java.lang.Class<T> disposent désormais d'une méthode équivalente qui accepte un kotlin.reflect.KClass<T>.

La compatibilité binaire sur Android a été maintenue, mais il y a quelques changements notables lorsque vous comparez la surface d'API Android à la surface d'API commune:

  • La construction d'une instance ViewModelProvider est désormais effectuée 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 fabrique personnalisée sur des plates-formes autres que JVM entraînera une exception UnsupportedOperationException. Sur les plates-formes JVM, la compatibilité est préservée à l'aide du constructeur ViewModel sans argument si aucune fabrique personnalisée n'est fournie.
  • viewModelScope utilisera un EmptyCoroutineContext sur les plates-formes où Dispatchers.Main n'est pas disponible (par exemple, Linux).

Nouveaux comportements

  • InitializerViewModelFactory (y compris la fonction de constructeur viewModelFactory) génère désormais une IllegalArgumentException si un initializer avec 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 key est déjà associé à une ressource AutoCloseable, l'ancienne ressource sera remplacée et fermée immédiatement. (Ibeb67).
  • L'accès au viewModelScope d'un ViewModel est désormais thread-safe. (If4766, b/322407038).

Contribution externe

  • 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. 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, ce qui vous permet de supprimer des clics ou d'autres événements qui se produisent même après que le LifecycleOwner est passé en dessous de la Lifecycle.State donnée. Par exemple, cette fonction peut être utilisée 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é multiplateforme Kotlin

  • Les principales API Lifecycle dans Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event et LifecycleRegistry sont désormais disponibles dans des artefacts compatibles avec la multiplateforme Kotlin. (b/317249252).

Modifications apportées à l'API

  • Appeler LifecycleStartEffect et LifecycleResumeEffect sans clé est désormais une erreur, conformément à la même convention que l'API DisposableEffect que ces API mettent en miroir. (Ib0e0c, b/323518079).
  • ViewModel utilise désormais AutoCloseable au lieu de Closeable. Il s'agit d'un changement 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 pour son aide à 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 renvoi. En particulier, contrairement à la définition directe de la propriété currentState, runBlocking n'est pas utilisé, ce qui permet une utilisation sûre dans une coroutine comme celle fournie par runTest.
  • Les extensions LiveData de map et switchMap reflètent désormais le comportement de distinctUntilChanged. Si LiveData a un value défini, la fonction map/switchMap sera immédiatement appelée pour renseigner le value de l'élément LiveData renvoyé. Cela garantit que la valeur initiale sera définie dans la première composition (lorsqu'elle est utilisée avec observeAsState()), mais ne modifie pas le comportement d'observation. Les mises à jour de la source LiveData ne s'appliquent toujours que lorsque vous commencez à observer le LiveData.
  • Cette version corrige un problème qui empêchait SavedStateHandle de restaurer correctement les classes Parcelable personnalisées après l'arrêt et la recréation du processus. En raison des informations de type perdues par le framework Android, les tableaux de Parcelable personnalisés nécessitent des efforts supplémentaires (création manuelle d'un tableau typé du type approprié), et la documentation sur get, getLiveData et getStateFlow mentionne désormais spécifiquement cette limitation.
  • Les règles de conservation ProGuard associées à LifecycleObserver ont été supprimées. Cela signifie que le code ProGuard qui souhaite utiliser des API par réflexion (par exemple, en utilisant l'annotation @OnLifecycleEvent obsolète) 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 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 des effets secondaires Compose basés sur 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 : arrêtés et réactivés respectivement. Cette API reflète celle trouvée dans DisposableEffect et convient aux cas où la modification effectuée lorsque l'état augmente doit être inversée lors de la rétrogradation.
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 l'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 une alternative plus courte).

Pour en savoir plus, consultez Collecter l'état du cycle de vie à l'aide de 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 Parcelable personnalisés nécessitent des efforts supplémentaires (création manuelle d'un tableau typé du type approprié), et 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

  • Désormais, LifecycleStartEffect et LifecycleResumeEffect suppriment et recréent correctement le bloc d'effet si 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

  • Augmentation de la version bêta, aucune modification majeure de 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 de TestLifecycleOwner à l'aide du champ currentState lorsque vous vous trouvez dans une coroutine. La vérification lint suggère désormais la suspension setCurrentState, qui permet de définir Lifecycle.State sans blocage. (Icf728, b/297880630).

Correction de bugs

  • Correction d'un problème lié à LiveData.switchMap où le renvoi de la même instance LiveData lors de l'appel initial et d'un appel ultérieur empêchait l'ajout de l'instance LiveData en tant que source. (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 principal lifecycle-livedata. (I10c6f, b/274800183).

Nouveaux comportements

  • Les extensions LiveData.map() et LiveData.switchMap() définissent désormais le value du LiveData renvoyé si une valeur a été définie pour le LiveData précédent. Cela garantit que l'utilisation du LiveData obtenu dans Jetpack Compose a l'état approprié sur la composition initiale. (I91d2b, b/269479952).
  • Le addCloseable() de ViewModel ferme désormais immédiatement le 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 SavedStateHandle d'être correctement restauré après l'arrêt du processus si l'état était restauré, save() était appelé sans enregistrer l'état dans le SavedStateRegistry parent, puis l'état était à nouveau restauré. Cela corrige l'interaction entre rememberSaveable et le 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 via Compose via Lifecycle.currentStateFlow, qui renvoie un StateFlowvalue est l'actuel Lifecycle.State. (Ib212d, b/209684871).
  • Les Lifecycle.Event peuvent désormais être observées en tant que Flow avec Lifecycle.asFlow().. (If2c0f, b/176311030)
  • Ajout de l'API LifecycleResumeEffect pour exécuter les SideEffect Compose en fonction des rappels d'événements Lifecycle.Event.ON_RESUME et Lifecycle.Event.ON_PAUSE. (I60386, b/235529345).
  • Ajout de l'API LifecycleStartEffect pour exécuter les SideEffect Compose en fonction des rappels d'événements Lifecycle.Event.ON_START et Lifecycle.Event.ON_STOP. (I5a8d1, b/235529345).
  • Ajout de l'API LifecycleEventEffect pour exécuter les SideEffect Compose basées sur Lifecycle.Event. (Ic9794, b/235529345).
  • Ajout de l'extension Lifecycle.collectAsState() pour exposer directement Lifecycle.State en tant que State Compose. Cela équivaut à lifecycle.currentStateFlow.collectAsState() (et 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 proGuard qui souhaite utiliser des API par réflexion doit 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 la restauration correcte de SavedStateHandle après l'arrêt du processus si l'état était restauré. save() était appelé sans enregistrer l'état dans le SavedStateRegistry parent, puis l'état était à nouveau restauré. Cela corrige l'interaction entre rememberSaveable et le 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 d'un travail, veuillez consulter cette explication afin de découvrir pourquoi cette suspension est intrinsèquement dangereuse.
  • Conversion Kotlin : de nombreuses classes Lifecycle ont été converties en Kotlin. Toutes les classes converties conservent leur compatibilité binaire avec les versions précédentes. Les classes suivantes comportent des modifications incompatibles avec la source pour les classes écrites en Kotlin: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner.

Le tableau ci-dessous indique 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 à celle 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)

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

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

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

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