Cycle de vie
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-alpha07 |
lifecycle-viewmodel-compose | 2.8.7 | - | - | 2.9.0-alpha07 |
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.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Version 2.9
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 utiliserSavedStateHandle
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 introduitsaved
, un délégué de propriété paresseux, pour faciliter le stockage des classes@Serializable
dans unSavedStateHandle
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 lambdainit
ni n'enregistre quoi que ce soit dansSavedStateHandle
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 unMutableStateFlow
. Cette nouvelle fonction est exclusive aux clés et ne peut pas être utilisée avecgetLiveData
. 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 unLifecycle
vers un autre état entraînera désormais unIllegalStateException
. (I116c4, b/370577987) SavedStateHandle
n'inclut plus deSavedStateProvider.saveState()
lorsque leBundle
renvoyé est vide. (I910b5, b/370577987)
Correction de bugs
Lifecycle.eventFlow
se termine désormais correctement lorsqueLifecycle
estDESTROYED
. (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 queSavedStateHandle
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 lintNullSafeMutableLiveData
a amélioré la prise en charge des castings intelligents, ce qui évite les faux positifs. (85fed6, b/181042665)
Mises à jour des dépendances
- À partir de Lifecycle
2.8.6
: Lifecycle Runtime Compose dépend désormais de Compose Runtime1.7.1
. - Lifecycle Runtime dépend désormais de ProfileInstaller
1.4.0
.
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 ProGuardandroidx.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 classeViewModelScenario
permettant de tester les ViewModels de manière isolée, avec la prise en charge deonCleared
(toutes les plates-formes) et deSavedStateHandle
(Android uniquement). (337f68d, c9b3409, 9799a95c, b/264602919) - La création d'un
ViewModel
avecViewModelProvider
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'objetsCreationExtras.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'utiliserin
,+=
et+
avecCreationExtras
. (Ib4353)CreationExtras
implémente désormais les méthodesequals
,hashCode
ettoString
. (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 artefactsdesktop
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
- Lifecycle Runtime Compose dépend désormais de Compose Runtime
1.7.1
.
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 leLiveData
(par exemple, lors de l'utilisation detake(1)
). (I9c566)- La finalisation de
Lifecycle*Effect
est désormais idempotente (c'est-à-dire que sionStopOrDispose
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 LifecyclecompileOnly
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 surcompose-runtime
, ce qui supprime sa dépendance commune surcompose-ui
. L'artefact Android conserve soncompose-ui
pour des raisons de compatibilité. (aosp/3079334, b/339562627)- L'intégration de
saveable
dansViewModel
à 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êmeSavedStateHandle
. (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 verslifecycle-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 APIdropUnlessResumed
etdropUnlessStarted
, qui vous permettent de supprimer les clics ou d'autres événements qui se produisent même après que leLifecycleOwner
est descendu en dessous duLifecycle.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 etSupervisorJob()
ou de remplacer la valeur par défaut à l'aide debackgroundScope
disponible dansrunTest
. (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ésormaisAutoClosable
au lieu deCloseable
. Il est désormais possible d'ajouter des objetsAutoCloseable
avec unkey
qui permet de les récupérer viagetCloseable()
.Appeler
LifecycleStartEffect
etLifecycleResumeEffect
sans clé génère désormais une erreur, conformément à la même convention que l'APIDisposableEffect
que ces API reflètent.LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
est désormais obsolète et remplacé parLiveData.toPublisher(lifecycleOwner)
.Les extensions Kotlin
lifecycle-livedata-core-ktx
ont été déplacées vers le modulelifecycle-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 verscommon
et est compatible avec jvm et iOS en plus d'Android.lifecycle-runtime
transfère la plupart des API verscommon
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 verslifecycle-runtime
.lifecycle-runtime-compose
déplace toutes les API verscommon
et fournit un artefact Android, ce qui correspond à la compatibilité multiplate-forme deandroidx.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éthodesViewModelProvider.create()
au lieu d'appeler directement son constructeur. ViewModelProvider.NewInstanceFactory
etViewModelProvider.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éthodecreate
qui accepte unCreationExtras
ou le DSL KotlinviewModelFactory
.
- Il est recommandé d'étendre les fabriques personnalisées à partir de
- L'utilisation de
ViewModelProvider
sans usine personnalisée sur des plates-formes autres que JVM entraîne une erreurUnsupportedOperationException
. 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 unEmptyCoroutineContext
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 verscommon
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 verslifecycle-viewmodel
.lifecycle-viewmodel-compose
déplace toutes les API verscommon
et fournit un artefact Android, ce qui correspond à la compatibilité multiplate-forme deandroidx.compose
.
Nouveaux comportements
InitializerViewModelFactory
(y compris la fonction de créationviewModelFactory
) génère désormais uneIllegalArgumentException
si uninitializer
avec le mêmeclazz: KClass<VM : ViewModel>
a déjà été ajouté. (Ic3a36)
Problèmes connus
lifecycle-*:2.8.0
nécessite une version minimale de Compose 1.7.0-alpha05 (b/336842920).
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'AARlifecycle-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)
, puisaddClosable(AutoCloseable)
, puisonCleared()
) 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 verscommon
et fournit un artefact Android, ce qui correspond à la compatibilité multiplateforme deandroidx.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 verscommon
et fournit un artefact Android, ce qui correspond à la compatibilité multiplateforme deandroidx.compose
. Pour prendre en compte cette modification, la méthodeviewModel
du composable accepte désormais unKClass
en plus d'unjava.lang.Class
. (b/330323282)
Correction de bugs
NullSafeMutableLiveData
a été refactorisé pour éviter de nombreux faux positifs. (I2d8c1, Iafb18, I03463, I7ecef)
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 etSupervisorJob()
ou de remplacer la valeur par défaut à l'aide debackgroundScope
disponible dansrunTest
. (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éthodesViewModelProvider.create()
au lieu d'appeler directement son constructeur. ViewModelProvider.NewInstanceFactory
etViewModelProvider.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éthodecreate
qui accepte unCreationExtras
ou le DSL KotlinviewModelFactory
.
- Il est recommandé d'étendre les fabriques personnalisées à partir de
- L'utilisation de
ViewModelProvider
sans usine personnalisée sur des plates-formes autres que JVM entraîne une erreurUnsupportedOperationException
. 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 unEmptyCoroutineContext
sur les plates-formes oùDispatchers.Main
n'est pas disponible (par exemple, Linux).
Nouveaux comportements
InitializerViewModelFactory
(y compris la fonction de créationviewModelFactory
) génère désormais uneIllegalArgumentException
si uninitializer
avec le mêmeclazz: 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 ressourceAutoCloseable
est déjà associée àkey
, l'ancienne ressource est remplacée et fermée immédiatement. (Ibeb67)- L'accès à l'
viewModelScope
d'unViewModel
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
etdropUnlessStarted
ont été ajoutées. Elles vous permettent de supprimer les clics ou d'autres événements qui se produisent même après que leLifecycleOwner
est descendu en dessous duLifecycle.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
etLifecycleRegistry
sont désormais fournies dans des artefacts compatibles avec Kotlin Multiplatform. (b/317249252)
Modifications apportées à l'API
- Appeler
LifecycleStartEffect
etLifecycleResumeEffect
sans clé génère désormais une erreur, conformément à la même convention que l'APIDisposableEffect
que ces API reflètent. (Ib0e0c, b/323518079) ViewModel
utilise désormaisAutoCloseable
au lieu deCloseable
. Il s'agit d'une modification rétrocompatible. (I27f8e, b/214568825)LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
est désormais obsolète et remplacé parLiveData.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 objetsCloseable
avec unkey
qui permet de les récupérer viagetCloseable()
. (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 suspensionsetCurrentState()
qui garantit que le changement d'état et tous les rappelsLifecycleObserver
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 pasrunBlocking
. Elle peut donc être utilisée en toute sécurité dans une coroutine, comme celle fournie parrunTest
.- Les extensions
LiveData
demap
etswitchMap
reflètent désormais le comportement dedistinctUntilChanged
. Sivalue
est défini pourLiveData
, la fonctionmap
/switchMap
est immédiatement appelée pour renseignervalue
de l'LiveData
renvoyé. Cela garantit que la valeur initiale sera définie dans le cadre de la première composition (lorsqu'utilisée avecobserveAsState()
), mais ne modifie pas le comportement d'observation. Les valeurs mises à jour à partir de la sourceLiveData
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 classesParcelable
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 surget
,getLiveData
etgetStateFlow
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 unFlow
deLifecycle.Event
via la méthode d'extensionLifecycle.asFlow()
. - Les utilisateurs de Jetpack Compose peuvent désormais utiliser
LifecycleEventEffect
pour exécuter les effets secondaires de Compose en fonction deLifecycle.Event
.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Les utilisateurs de Jetpack Compose peuvent utiliser
LifecycleStartEffect
etLifecycleResumeEffect
pour gérer des paires d'événements (début à arrêt et reprise à pause, respectivement). Cette API reflète celle deDisposableEffect
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 unStateFlow
oùvalue
est leLifecycle.State
actuel. - Les utilisateurs de Jetpack Compose peuvent utiliser l'extension
Lifecycle.currentStateAsState()
pour exposer directementLifecycle.State
en tant queState
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 classesParcelable
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 surget
,getLiveData
etgetStateFlow
fait désormais spécifiquement référence à 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
etLifecycleResumeEffect
suppriment et recréent désormais correctement le bloc d'effet si leLifecycleOwner
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 leLifecycle.State
duTestLifecycleOwner
à l'aide du champcurrentState
lorsqu'il se trouve dans une coroutine. La vérification lint suggère désormais de suspendresetCurrentState
, ce qui permet de définirLifecycle.State
sans blocage. (Icf728, b/297880630)
Correction de bugs
- Correction d'un problème avec
LiveData.switchMap
qui empêchait l'ajout de l'instanceLiveData
en tant que source si la même instanceLiveData
é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 suspensionsetCurrentState()
pour permettre aux utilisateurs d'utiliserTestLifecycleOwner
à partir d'une coroutine, comme celle fournie parrunTest
. (I329de, b/259344129)
Modifications apportées à l'API
- Tous les fichiers des modules
lifecycle-livedata-ktx
ont été déplacés vers le modulelifecycle-livedata
principal. (I10c6f, b/274800183)
Nouveaux comportements
- Les extensions
LiveData.map()
etLiveData.switchMap()
définissent désormais l'élémentvalue
de l'objetLiveData
renvoyé si une valeur a été définie pour l'objetLiveData
précédent. Cela garantit que l'utilisation du LiveData généré dans Jetpack Compose a le bon état pour la composition initiale. (I91d2b, b/269479952) - Le
addCloseable()
deViewModel
ferme désormais immédiatement laCloseable
siViewModel
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 deSavedStateHandle
après la fin du processus si l'état était restauré,save()
était appelé sans enregistrer réellement l'état dans leSavedStateRegistry
parent, puis l'état était restauré à nouveau. Cela corrige l'interaction entrerememberSaveable
etNavHost
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 viaLifecycle.currentStateFlow
, qui renvoie unStateFlow
oùvalue
est l'Lifecycle.State
actuel. (Ib212d, b/209684871)- Les
Lifecycle.Event
peuvent désormais être observés en tant queFlow
avecLifecycle.asFlow().
. (If2c0f, b/176311030) - L'API
LifecycleResumeEffect
a été ajoutée pour exécuter desSideEffect
Compose en fonction des rappels d'événementsLifecycle.Event.ON_RESUME
etLifecycle.Event.ON_PAUSE
. (I60386, b/235529345) - L'API
LifecycleStartEffect
a été ajoutée pour exécuter desSideEffect
Compose en fonction des rappels d'événementsLifecycle.Event.ON_START
etLifecycle.Event.ON_STOP
. (I5a8d1, b/235529345) - L'API
LifecycleEventEffect
a été ajoutée pour exécuter desSideEffect
Compose basés surLifecycle.Event
. (Ic9794, b/235529345) - L'extension
Lifecycle.collectAsState()
a été ajoutée pour exposer directementLifecycle.State
en tant queState
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émentvalue
de l'objetLiveData
renvoyé si une valeur a été définie pour l'objetLiveData
précédent. Cela ne change pas le comportement d'observation. Les valeurs mises à jour à partir de la sourceLiveData
s'appliquent uniquement lorsque vous commencez à observer les objetsLiveData
renvoyés pardistinctUntilChanged()
. (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é, quesave()
était appelé sans enregistrer réellement l'état dans leSavedStateRegistry
parent, puis que l'état était restauré à nouveau. Cela corrige l'interaction entrerememberSaveable
etNavHost
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
lifecycle-viewmodel-savedstate
dépend désormais de SavedState1.2.1
. (cd7251)- Lifecycle dépend désormais de ProfileInstaller
1.3.0
. (f9d30b)
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 pourLiveData
. Vous pouvez ainsi faire la distinction entreliveData.value
qui renvoienull
, car aucune valeur n'a jamais été définie, ou une valeurnull
explicite.MediatorLiveData
comprend désormais un constructeur pour définir une valeur initiale.- Ajout d'une extension sur
StateFlow
etFlow
decollectAsStateWithLifecycle()
, 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
etLifecycle.whenX
, car l'utilisation d'un coordinateur de suspension peut entraîner le gaspillage de ressources dans certains cas. Nous vous recommandons d'utiliserLifecycle.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'unObserver
créé en Kotlin correspond désormais à la possibilité de valeur nulle du type générique. Si vous souhaitez queObserver.onChanged()
accepte un type nullable, vous devez instancierObserver
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
etProcessLifecycleOwner
.
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émentvalue
de l'objetLiveData
renvoyé si une valeur a été définie pour l'objetLiveData
précédent. Cela ne change pas le comportement d'observation. Les valeurs mises à jour à partir de la sourceLiveData
s'appliquent uniquement lorsque vous commencez à observer les objetsLiveData
renvoyés pardistinctUntilChanged()
. (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 fonctiongetLifecycle()
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 fonctiongetViewModelStore()
précédente. (I86409, b/240298691)- L'extension Kotlin sur
LifecycleOwner
qui fournit le champlifecycleScope
a été déplacée vers l'artefactlifecycle-common
à partir delifecycle-runtime-ktx
. (I41d78, b/240298691) - L'extension Kotlin sur
Lifecycle
qui fournit le champcoroutineScope
a été déplacée vers l'artefactlifecycle-common
à partir delifecycle-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, commeTransformations.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 delifecycle-livedata-ktx
. Lorsque vous utilisez le langage de programmation Java, les versions de ces méthodes qui utilisent une méthodeandroidx.arch.core.util.Function
sont obsolètes et remplacées par les versions qui acceptent uneFunction1
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 surView
deandroidx.lifecycle.setViewTreeViewModelStoreOwner
etandroidx.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ésdefaultViewModelProviderFactory
etdefaultViewModelCreationExtras
plutôt que d'implémenter les précédentes fonctions correspondantes. (Iaed9c, b/240298691) Observer
est désormais écrit en Kotlin. Sa méthodeonChanged()
utilise à présent le nomvalue
comme paramètre. (Iffef2, I4995e, b/240298691)AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
etProcessLifecycleOwner
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 pourLiveData
. Vous pouvez ainsi faire la distinction entreliveData.value
qui renvoienull
, car aucune valeur n'a jamais été définie, ou une valeurnull
explicite. (Ibd018)
Modifications apportées à l'API
- Les API
collectAsStateWithLifecycle()
delifecycle-runtime-compose
ne sont plus au stade expérimental. (I09d42, b/258835424) - Abandon des méthodes
Lifecycle.launchWhenX
etLifecycle.whenX
, car l'utilisation d'un coordinateur de suspension peut entraîner le gaspillage de ressources dans certains cas. Nous vous recommandons d'utiliserLifecycle.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 surView
deandroidx.lifecycle.setViewTreeLifecycleOwner
etandroidx.lifecycle.findViewTreeLifecycleOwner
pour définir et rechercher un propriétaire défini précédemment. Cette action remplace l'extension Kotlin précédente danslifecycle-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 danslifecycle-reactivestreams-ktx
ont été déplacées dans le modulelifecycle-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
etViewModelStore
sont maintenant écrits en Kotlin. (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)
Correction de bugs
- Correction du plantage de
SavedStateHandle
avec uneClassCastException
lorsqueget()
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 uncallbackFlow
au lieu d'utiliser sa propre implémentationChannel
pour garantir la thread safety et la conservation du contexte. (I4a8b2, b/200596935)- La fonction
asLiveData
deFlowLiveData
conserve désormais la valeur initiale d'un objetStateFlow
lors de la création du nouvel objetLiveData
. (I3f530, b/157380488) - Pour Lifecycle
2.5.1
: les implémentations personnalisées deAndroidViewModelFactory
appellent désormais correctement la fonctioncreate(modelClass)
lorsque vous utilisez le constructeur avec état avecLifecycle
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
etFlow
decollectAsStateWithLifecycle
, 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 certainLifecycle.State
. Lorsque le cycle de vie passe en dessous de ceLifecycle.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 fonctioncreate(modelClass)
lors de l'utilisation du constructeurAndroidViewModelFactory
avec état avecLifecycle
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 APIgetStateFlow()
qui renvoie unStateFlow
Kotlin pour surveiller les modifications de valeur au lieu d'utiliserLiveData
.ViewModel CreationExtras : lors de l'écriture d'un
ViewModelProvider.Factory
personnalisé, il n'est plus nécessaire d'étendreAndroidViewModelFactory
ouAbstractSavedStateViewModelFactory
pour accéder àApplication
ou àSavedStateHandle
, respectivement. En revanche, ces champs sont fournis à chaque sous-classe deViewModelProvider.Factory
en tant queCreationExtras
via la nouvelle surcharge decreate
: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 Fragment1.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 DSLviewModelFactory
Kotlin qui vous permet de définir votreViewModelProvider.Factory
en fonction d'un ou de plusieurs initialiseurs lambda, un pour chaque classeViewModel
compatible avec votre fabrique personnalisée, à l'aide deCreationExtras
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 APIviewModel()
qui nécessite une fabrique lambda pour créer une instanceViewModel
sans créer deViewModelProvider.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 dansSavedStateHandle.saveable
qui permettent àrememberSaveable
d'utiliser un comportement reposant sur leSavedStateHandle
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 objetsCloseable
auViewModel
, qui seront clôturés lorsqueViewModel
sera effacé sans nécessiter de travail manuel dansonCleared()
.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émenteCloseable
: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 queviewModelScope
: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
deINITIALIZED
versDESTROYED
génère désormais systématiquement unIllegalStateException
, que leLifecycle
soit associé à un observateur ou non. LifecycleRegistry
efface maintenant ses observateurs lorsqu'ils atteignent l'étatDESTROYED
.
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 exceptionNullPointerException
lorsqu'une sourcenull
est transmise au lieu de propager la sourcenull
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 dansSavedStateHandle
. (I8bb86, b/225014345)
Correction de bugs
- L'imbrication d'un
NavHost
dans un autreNavHost
au sein d'un onglet de navigation inférieure non primaire entraînait une exceptionIllegalStateException
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éterrememberSaveable
. (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 parSavedStateHandleController
. (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ésormaisSavedStateHandleSaver
, une API expérimentale qui garantit que les valeurs deSavedStateHandle
sont intégrées correctement avec le même état d'instance enregistré que celui utilisé parrememberSaveable
. (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 avecCreationExtras
, même lorsqu'ils ont été initialisés avec unSavedStateRegistryOwner
. 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 APIgetStateFlow()
qui renvoie unStateFlow
Kotlin pour surveiller les modifications de valeur au lieu d'utiliserLiveData
. (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 objetsCloseable
auViewModel
, qui seront clôturés lorsqueViewModel
sera effacé sans nécessiter de travail manuel dansonCleared()
. (I55ea0) lifecycle-viewmodel
fournit désormais unInitializerViewModelFactory
qui vous permet d'ajouter un lambda pour traiter des classesViewModel
particulières, en utilisantCreationExtras
comme source de données principale. (If58fc, b/216687549)lifecycle-viewmodel-compose
propose maintenant une APIviewModel()
qui nécessite une fabrique lambda pour créer une instanceViewModel
sans créer deViewModelProvider.Factory
personnalisé. (I97fbb, b/216688927)
Modifications apportées à l'API
- Vous pouvez maintenant créer un
ViewModel
avecCreationExtras
vialifecycle-viewmodel-compose
. (I08887, b/216688927)
Nouveaux comportements
- Toute tentative de déplacement de
Lifecycle.State
deINITIALIZED
versDESTROYED
génère désormais systématiquement unIllegalStateException
, que leLifecycle
soit associé à un observateur ou non. (I7c390, b/177924329) LifecycleRegistry
efface maintenant ses observateurs lorsqu'ils atteignent l'étatDESTROYED
. (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
etSavedStateViewModelFactory
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 à jourlifecycle-process
pour qu'il dépende de Startup 1.1.1 afin de garantir que les corrections qui empêchentProcessLifecycleInitializer
de générer une exceptionStartupException
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 unViewModel
. (I340f7, b/177667711) - Vous pouvez désormais créer un modèle de vue via
CreationExtras
à l'aide deAndroidViewModelFactory
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
: ceString
fournit un accès à la clé personnalisée que vous avez transmise àViewModelProvider.get()
.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
permet d'accéder à la classeApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
permet d'accéder auSavedStateRegistryOwner
utilisé pour construire ce ViewModel.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
permet d'accéder auViewModelStoreOwner
utilisé pour construire ce ViewModel.SavedStateHandleSupport.DEFAULT_ARGS_KEY
permet d'accéder auBundle
des arguments à utiliser pour construire unSavedStateHandle
.
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 deSavedStateHandle
. 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 à unSavedStateHandle
après la mort du processus et sa recréation, même si elle était spécifiquement supprimée deSavedStateHandle
. 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 deProcessLifecycleInitializer
entraînait une exceptionStartupException
. (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
. UtilisezLifecycleEventObserver
ouDefaultLifecycleObserver
à la place. - Ajout de la bibliothèque
androidx.lifecycle:lifecycle-viewmodel-compose
. Elle fournit un composableviewModel()
etLocalViewModelStoreOwner
.- Modification destructive pour la source :
ViewModelProvider
a été réécrit en Kotlin. La méthodeViewModelProvider.Factory.create
n'autorise plus les éléments génériques pouvant être nuls.
- Modification destructive pour la source :
- 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é delifecycle.lifecycle-common-java8
verslifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
n'offre plus de fonctionnalités supplémentaires en plus delifecycle.lifecycle-common
, sa dépendance peut donc être remplacée parlifecycle.lifecycle-common
.- Des API qui ne sont pas des API de coroutines ont été déplacées de
lifecycle-viewmodel-ktx
vers le modulelifecycle-viewmodel
. lifecycle-process
utilise désormaisandroidx.startup
pour initialiserProcessLifecycleOwner
.Auparavant, cette initialisation était réalisée par
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Si vous utilisiez
tools:node="remove"
surContentProvider
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
. UtilisezLifecycleEventObserver
ouDefaultLifecycleObserver
à la place. (I5a8fa) - DefaultLifecycleObserver a été déplacé de
androidx.lifecycle.lifecycle-common-java8
versandroidx.lifecycle.lifecycle-common
.androidx.lifecycle.lifecycle-common-java8
n'offre plus de fonctionnalités supplémentaires en plus deandroidx.lifecycle.lifecycle-common
, sa dépendance peut donc être remplacée parandroidx.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 modulelifecycle-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
danslifecycle-runtime-ktx
, qui détecte sirepeateOnLifecycle
est utilisé de manière incorrecte dansonStart()
ouonResume()
. (706078, b/187887400)
Modifications apportées à l'API
- L'API
LifecycleOwner.addRepeatingJob
est supprimée au profit deLifecycle.repeatOnLifecycle
, qui respecte la simultanéité structurée et est plus facile à comprendre. (I4a3a8) ProcessLifecycleInitializer
a été rendu public afin que d'autresandroidx.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
- Merci à maxsav d'avoir amélioré la vérification lint
NullSafeMutableLiveData
. (#147, b/183696616) - Merci à kozaxinan d'avoir amélioré la vérification lint
NullSafeMutableLiveData
. (#161, b/184830263)
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ésormaisandroidx.startup
pour initialiserProcessLifecycleOwner
.Auparavant, cette initialisation était réalisée par
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Si vous utilisiez
tools:node="remove"
surContentProvider
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'APILifecycle.repeatOnLifecycle
. Il s'agit d'une alternative à la nouvelle APILifecycleOwner.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 unViewModelStoreOwner
facultatif, ce qui facilite la collaboration avec d'autres propriétaires queLocalViewModelStoreOwner
. Par exemple, vous pouvez maintenant utiliserviewModel(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
etandroidx.navigation:navigation-compose
de synchroniser les dépendances surandroidx.compose.compiler:compiler:1.0.0-beta04
etandroidx.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 objetViewModelStoreOwner
pouvant être nul pour mieux déterminer si un objetViewModelStoreOwner
est disponible dans la composition actuelle. Les API qui nécessitent unViewModelStoreOwner
, tels queviewModel()
etNavHost
, génèrent quand même une exception si aucun élémentViewModelStoreOwner
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 fonctionprovides
pouvant être utilisée avecCompositionLocalProvider
, en remplacement de l'APIasProvidableCompositionLocal()
. (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()
etLocalViewModelStoreOwner
ont été déplacés deandroidx.compose.ui.viewinterop
vers cet artefact dans le packageandroidx.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'appelersetSavedStateProvider()
pour une clé donnée, en fournissant unSavedStateProvider
qui reçoit un rappel àsaveState()
lorsqueSavedStateHandle
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 objetsLifecycleRegistry
appartenant à vos propres composants, vous pouvez désactiver explicitement les vérifications à l'aide deLifecycleRegistry.createUnsafe(...)
, mais vous devez ensuite vous assurer qu'une synchronisation appropriée est effectuée lorsque vous accédez àLifecycleRegistry
depuis différents threads.
- LifecycleRegistry applique maintenant
- Assistants d'état et d'événement de cycle de vie : ajout de méthodes d'assistance statiques
downFrom(State)
,downTo(State)
,upFrom(State)
etupTo(State)
àLifecycle.Event
pour générer unEvent
en fonction d'unState
et d'une direction de transition. Ajout de la méthodegetTargetState()
, qui fournit leState
auquel le cycle de vie passera directement après unEvent
. withStateAtLeast
: ajout des APILifecycle.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éthodeswhen*
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 APIViewTreeLifecycleOwner.get(View)
etViewTreeViewModelStoreOwner.get(View)
vous permettent respectivement de récupérer lesLifecycleOwner
et lesViewModelStoreOwner
associés à une instanceView
. Vous devez passer à Activity1.2.0
, Fragment1.3.0
et AppCompat 1.3.0-alpha01 ou versions ultérieures pour renseigner ces éléments correctement. Les extensions KotlinfindViewTreeLifecycleOwner
etfindViewTreeViewModelStoreOwner
sont respectivement disponibles danslifecycle-runtime-ktx
etlifecycle-viewmodel-ktx
. - Abandon de l'extension Kotlin
LiveData.observe()
: l'extension KotlinLiveData.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()
deSavedStateHandle
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 avecsetSavedStateProvider()
, en plus de celles utilisées avecset()
etgetLiveData()
. (aosp/1517919, b/174713653)
Contribution externe
- Les API permettant de suspendre les coroutines prenant en compte le cycle de vie gèrent désormais plus efficacement les appels à
yield()
. Merci Nicklas Ansman Giertz ! (aosp/1430830, b/168777346)
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
- Mise à jour d'AndroidX pour utiliser Kotlin 1.4. (Id6471, b/165307851, b/165300826)
Modifications de la documentation
- Le compilateur
liveData
et la documentationasLiveData()
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)
etupTo(State)
àLifecycle.Event
pour générer unEvent
en fonction d'unState
et d'une direction de transition. Ajout de la méthodegetTargetState()
, qui fournit leState
auquel le cycle de vie passera directement après unEvent
. (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éthodeswhen*
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 objetsLifecycleRegistry
appartenant à vos propres composants, vous pouvez désactiver explicitement les vérifications à l'aide deLifecycleRegistry.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 aveclifecycle-livedata-core-ktx
(etNullSafeMutableLiveData
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()
ouonInactive()
. (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 valeurnull
a été définie sur unMutableLiveData
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'appelersetSavedStateProvider()
pour une clé donnée, en fournissant unSavedStateProvider
qui reçoit un rappel àsaveState()
lorsqueSavedStateHandle
est invité à enregistrer son état. (b/155106862)- Une nouvelle API
ViewTreeViewModelStoreOwner.get(View)
vous permet de récupérer le conteneurViewModelStoreOwner
en fonction d'une instanceView
. Vous devez passer à Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
et AppCompat1.3.0-alpha01
pour renseigner ces éléments correctement. Une extension KotlinfindViewModelStoreOwner()
a été ajoutée àlifecycle-viewmodel-ktx
. (aosp/1295522)
Correction de bugs
- Les vérifications lint de
MutableLiveData
publiées dans Lifecycle2.3.0-alpha01
n'étaient pas publiées avec l'artefactlifecycle-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 unApplication
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 pourAndroidViewModel
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 conteneurLifecycleOwner
en fonction d'une instanceView
. Vous devez passer à Activity1.2.0-alpha01
et Fragment1.3.0-alpha01
pour renseigner ces éléments correctement. Une extension KotlinfindViewTreeLifecycleOwner
est également disponible danslifecycle-runtime-ktx
. (aosp/1182361, aosp/1182956) - Ajout d'une vérification lint qui vous avertit lorsque vous définissez une valeur
null
surMutableLiveData
et que celui-ci est défini en Kotlin comme n'ayant pas une valeur nulle. Cette option est disponible lorsque vous utilisez les artefactslivedata-core-ktx
oulivedata-ktx
. (aosp/1154723, aosp/1159092) - Un nouvel artefact
lifecycle-runtime-testing
est disponible. Il fournitTestLifecycleOwner
, qui implémenteLifecycleOwner
et fournit unLifecycle
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 unFragment
ou unFragmentActivity
au nouveau constructeurViewModelProvider(ViewModelStoreOwner)
pour obtenir la même fonctionnalité que lorsque vous utilisez Fragment1.2.0
. - Abandon de l'artefact
lifecycle-extensions
: avec l'abandon deViewModelProviders.of()
ci-dessus, cette version marque l'abandon de la dernière API danslifecycle-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 utilisezLifecycleService
etlifecycle-process
si vous utilisezProcessLifecycleOwner
) plutôt quelifecycle-extensions
, car il n'y aura pas de version2.3.0
delifecycle-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 utiliserLifecycleEventObserver
.
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 dansViewModelStore
, puis interrogée avec la fabrique par défaut. - Correction de l'utilisation de
Dispatchers.Main.immediate
danslaunchWhenCreated
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 deDispatchers.Main
au lieu deDispatchers.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 exceptionNullPointerException
lors de l'utilisation de la version2.0.0
ou2.1.0
delifecycle-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 deliveData
utilisent désormaisDispatchers.Main.immediate
au lieu deDispatchers.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
- Les implémentations de
ViewModelStoreOwner
peuvent désormais implémenterHasDefaultViewModelProviderFactory
pour fournir unViewModelProvider.Factory
par défaut. Cette option est facultative. Cette option est disponible pour Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
et Navigation2.2.0-alpha01
. (aosp/1092370, b/135716331)
Modifications apportées à l'API
ViewModelProviders.of()
est maintenant obsolète. Vous pouvez transmettre unFragment
ou unFragmentActivity
au nouveau constructeurViewModelProvider(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
parLiveDataScope.latestValue
, qui permet de suivre la valeur émise actuellement pour le blocliveData
. - Ajout d'une nouvelle surcharge au compilateur
liveData
, qui reçoit le paramètretimeout
de typeDuration
.
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 classeViewModel
et les fabriques fournies par défaut par Fragments. AppCompatActivity injectera automatiquementSavedStateHandle
. - 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 dansActivity.onActivityResult()
. (b/139093676) - Correction d'une exception
IllegalStateException
lors de l'utilisation deAbstractSavedStateViewModelFactory
. (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 plusAbstractSavedStateViewModelFactory
, etSavedStateHandle
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
lifecycle-viewmodel-savedstate
ne dépend plus defragment
, et les constructeursSavedStateViewModelFactory(Fragment)
etSavedStateViewModelFactory(FragmentActivity)
associés ont été supprimés. À la place,SavedStateViewModelFactory
est désormais la fabrique par défaut pour Activity1.1.0-alpha02
,Fragment1.2.0-alpha02
et Navigation2.2.0-alpha01
. (b/135716331)
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 ViewModelSavedStateVMFactory
. Votre ViewModel doit avoir un constructeur qui reçoit l'objetSavedStateHandle
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 classeGenericLifecycleObserver
masquée. - Ajout des extensions KTX pour les méthodes
LiveData.observe
etTransformations.*
. - Ajout de
Transformations.distinctUntilChanged
, qui crée un objet LiveData qui n'émet pas de valeur tant que la valeurLiveData
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 deViewModel
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 deby activityViewModels()
a été modifiée pour prendre en chargeViewModelStore
directement, au lieu d'utiliser simplementViewModelStoreOwner
. (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 deViewModelProvider.Factory
, n'était pas adaptée aux nouvelles fonctionnalités de délégation de propriété en Kotlinby 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éthodesetCurrentState()
qui remplace la méthodesetState()
, 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 conteneurViewModelStore
é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 classeGenericLifecycleObserver
masquée. - Ajout des extensions KTX pour les méthodes
LiveData.observe
etTransformations.*
. - Ajout de la méthode
Transformations.distinctUntilChanged
. Elle crée un objetLiveData
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çoitkey
etClass
dans la méthodecreate
.
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
etLifecycleFragment
obsolètes ont été supprimés. Veuillez utiliserFragmentActivity
ouAppCompatActivity
, ou assurez-vous queFragment
est compatible. - Ajout des annotations
@NonNull
àViewModelProviders
etViewModelStores
. - Abandon du constructeur
ViewModelProviders
. Veuillez utiliser ses méthodes statiques directement. - Abandon de
ViewModelProviders.DefaultFactory
. Veuillez utiliserViewModelProvider.AndroidViewModelFactory
. - Ajout de la méthode
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
statique pour récupérer uneFactory
statique adaptée à la création d'instancesViewModel
etAndroidViewModel
.