Stay organized with collections Save and categorize content based on your preferences.

Lifecycle

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

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

Artefact Version stable Version finale Version bêta Version alpha
lifecycle-* 2.5.1 - - 2.6.0-alpha02
lifecycle-viewmodel-compose 2.5.1 - - 2.6.0-alpha02
Dernière mise à jour de la bibliothèque : 7 septembre 2022

Déclarer des dépendances

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

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

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.5.1"
        def arch_version = "2.1.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"

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

        // Annotation processor
        kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.5.1"
        val arch_version = "2.1.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")

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

        // Annotation processor
        kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Java

Groovy

    dependencies {
        def lifecycle_version = "2.5.1"
        def arch_version = "2.1.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

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

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

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

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.5.1"
        val arch_version = "2.1.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

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

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

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

Commentaires

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

Signaler un problème

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

Version 2.6

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)

Corrections de bugs

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

Version 2.6.0-alpha01

29 juin 2022

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

Nouvelles fonctionnalités

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

Version 2.5

Version 2.5.1

27 juillet 2022

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

Corrections de bugs

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

Version 2.5.0

29 juin 2022

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

Modifications importantes depuis la version 2.4.0

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

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

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • lifecycle-viewmodel fournit désormais un DSL viewModelFactory Kotlin qui vous permet de définir votre ViewModelProvider.Factory en fonction d'un ou de plusieurs initialiseurs lambda, un pour chaque classe ViewModel compatible avec votre fabrique personnalisée, à l'aide de CreationExtras comme source de données principale.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose propose maintenant une API viewModel() qui nécessite une fabrique lambda pour créer une instance ViewModel sans créer de ViewModelProvider.Factory personnalisé.

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • Intégration de l'économiseur Compose SavedStateHandle : l'artefact lifecycle-viewmodel-compose contient désormais de nouvelles API expérimentales dans SavedStateHandle.saveable qui permettent à rememberSaveable d'utiliser un comportement reposant sur le SavedStateHandle d'un ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Ajout d'une API addCloseable() et d'une surcharge de constructeur qui vous permet d'ajouter un ou plusieurs objets Closeable au ViewModel, qui seront clôturés lorsque ViewModel sera effacé sans nécessiter de travail manuel dans onCleared().

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

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

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

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

Nouveaux comportements

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

Version 2.5.0-rc02

15 juin 2022

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

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

Corrections de bugs

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

Version 2.5.0-beta01

20 avril 2022

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

Modifications apportées à l'API

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

Corrections de bugs

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

Version 2.5.0-alpha06

6 avril 2022

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

Nouvelles fonctionnalités

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

Modifications apportées à l'API

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

Corrections de bugs

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

Version 2.5.0-alpha05

23 mars 2022

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

Nouvelles fonctionnalités

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

Modifications apportées à l'API

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

Corrections de bugs

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

Version 2.5.0-alpha04

9 mars 2022

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

Modifications apportées à l'API

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

Version 2.5.0-alpha03

23 février 2022

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

Nouvelles fonctionnalités

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

Modifications apportées à l'API

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

Nouveaux comportements

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

Version 2.5.0-alpha02

9 février 2022

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

Modifications apportées à l'API

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

Nouveaux comportements

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

Corrections de bugs

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

Version 2.5.0-alpha01

26 janvier 2022

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

CreationExtras pour ViewModel

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

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

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

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

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

class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}

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

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

Corrections de bugs

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

Version 2.4

Version 2.4.1

9 février 2022

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

Corrections de bugs

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

Version 2.4.0

27 octobre 2021

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

Changements importants depuis la version 2.3.0

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

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

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

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (ou)

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

Version 2.4.0-rc01

29 septembre 2021

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

Version 2.4.0-beta01

15 septembre 2021

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

Modifications apportées à l'API

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

Contribution externe

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

Version 2.4.0-alpha03

4 août 2021

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

Modifications apportées à l'API

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

Nouveaux comportements

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

Contribution externe

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

Version 2.4.0-alpha02

16 juin 2021

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

Nouvelles fonctionnalités

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

Modifications apportées à l'API

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

Corrections de bugs

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

Contribution externe

Version 2.4.0-alpha01

24 mars 2021

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

Nouveaux comportements

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

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

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

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (ou)

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

Modifications apportées à l'API

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

Corrections de bugs

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

Lifecycle Viewmodel Compose version 1.0.0

Version 1.0.0-alpha07

16 juin 2021

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

Modifications destructives de l'API

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

Version 1.0.0-alpha06

2 juin 2021

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

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

Version 1.0.0-alpha05

18 mai 2021

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

Nouvelles fonctionnalités

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

Corrections de bugs

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

Version 1.0.0-alpha04

7 avril 2021

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

Modifications de la dépendance

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

Version 1.0.0-alpha03

10 mars 2021

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

Modifications apportées à l'API

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

Lifecycle-Viewmodel-Compose version 1.0.0-alpha02

24 février 2021

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

Modifications apportées à l'API

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

Lifecycle-Viewmodel-Compose version 1.0.0-alpha01

10 février 2021

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

Nouvelles fonctionnalités

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

Version 2.3.1

Lifecycle version 2.3.1

24 mars 2021

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

Corrections de bugs

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

Version 2.3.0

Version 2.3.0

10 février 2021

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

Principales modifications depuis la version 2.2.0

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

Version 2.3.0-rc01

16 décembre 2020

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

Corrections de bugs

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

Contribution externe

Version 2.3.0-beta01

1er octobre 2020

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

Modifications apportées à l'API

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

Corrections de bugs

Modifications de la documentation

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

Version 2.3.0-alpha07

19 août 2020

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

Corrections de bugs

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

Version 2.3.0-alpha06

22 juillet 2020

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

Nouvelles fonctionnalités

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

Nouveaux comportements

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

Corrections de bugs

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

Version 2.3.0-alpha05

24 juin 2020

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

Corrections de bugs

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

Version 2.3.0-alpha04

10 juin 2020

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

Corrections de bugs

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

Version 2.3.0-alpha03

20 mai 2020

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

Nouvelles fonctionnalités

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

Corrections de bugs

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

Version 2.3.0-alpha02

29 avril 2020

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

Modifications apportées à l'API

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

Corrections de bugs

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

Version 2.3.0-alpha01

4 mars 2020

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

Nouvelles fonctionnalités

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

Corrections de bugs

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

Version 2.2.0

ViewModel-Savedstate version 2.2.0

5 février 2020

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

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

Version 2.2.0

22 janvier 2020

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

Changements importants depuis la version 2.1.0

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

Version 2.2.0-rc03

4 décembre 2019

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

Corrections de bugs

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

Contributions externes

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

Modifications de la dépendance

  • Les extensions Lifecycle dépendent 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.

Corrections de bugs

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

Version 2.2.0-rc01

23 octobre 2019

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

Corrections de bugs

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

Contributions externes

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

Version 2.2.0-beta01

9 octobre 2019

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

Corrections de bugs

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

Version 2.2.0-alpha05

18 septembre 2019

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

Corrections de bugs

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

Version 2.2.0-alpha04

5 septembre 2019

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

Nouvelles fonctionnalités

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

Contributions externes

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

Version 2.2.0-alpha03

7 août 2019

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

Nouvelles fonctionnalités

Modifications apportées à l'API

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

Version 2.2.0-alpha02

2 juillet 2019

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

Modifications apportées à l'API

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

Version 2.2.0-alpha01

7 mai 2019

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

Nouvelles fonctionnalités

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

ViewModel-SavedState version 1.0.0

Version 1.0.0

22 janvier 2020

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

Fonctionnalités importantes de la version 1.0.0

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

ViewModel-Savedstate version 1.0.0-rc03

4 décembre 2019

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

Modifications de la dépendance

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

Viewmodel-Savedstate version 1.0.0-rc02

7 novembre 2019

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

Modifications de la dépendance

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

ViewModel-SavedState version 1.0.0-rc01

23 octobre 2019

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

ViewModel-Savedstate version 1.0.0-beta01

9 octobre 2019

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

Corrections de bugs

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

ViewModel-SavedState version 1.0.0-alpha05

18 septembre 2019

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

Modifications apportées à l'API

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

ViewModel-SavedState version 1.0.0-alpha03

7 août 2019

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

Modifications destructives

ViewModel-SavedState version 1.0.0-alpha02

2 juillet 2019

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

Nouvelles fonctionnalités

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

Modifications apportées à l'API

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

ViewModel-Savedstate version 1.0.0-alpha01

13 mars 2019

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

Nouvelles fonctionnalités

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

Version 2.1.0

Changements importants depuis la version 2.0.0

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

Version 2.1.0

5 septembre 2019

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

Version 2.1.0-rc01

2 juillet 2019

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

Version 2.1.0-beta01

7 mai 2019

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

Nouvelles fonctionnalités

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

Version 2.1.0-alpha04

3 avril 2019

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

Modifications apportées à l'API

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

Version 2.1.0-alpha03

13 mars 2019

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

Modifications apportées à l'API

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

Version 2.1.0-alpha02

30 janvier 2019

Publication d'androidx.lifecycle 2.1.0-alpha02.

Modifications apportées à l'API

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

Corrections de bugs

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

Version 2.1.0-alpha01

17 décembre 2018

Publication d'androidx.lifecycle 2.1.0-alpha01.

Nouvelles fonctionnalités

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

Version 2.0.0

Version 2.0.0

21 septembre 2018

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

Corrections de bugs

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

Version 2.0.0-beta01

2 juillet 2018

Corrections 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 apportées aux packages

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

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

Modifications apportées à l'API

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