Environnement d'exécution Compose

Composants fondamentaux du modèle de programmation et de la gestion d'état de Compose, et environnement d'exécution principal du plug-in Compose Compiler à cibler.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
17 avril 2024 1.6.6 - - 1.7.0-alpha07

Structure

Compose est une combinaison de sept ID de groupe Maven dans androidx, chacun contenant un sous-ensemble ciblé de fonctionnalités. Chaque sous-ensemble est associé à son propre ensemble de notes de version.

Ce tableau décrit les différents groupes et renvoie à chaque ensemble de notes de version.

GroupeDescription
compose.animationCréer des animations dans les applications Jetpack Compose afin d'enrichir l'expérience utilisateur.
compose.compilerTransformation de fonctions @Composable et prise en charge des optimisations avec un plug-in de compilation en Kotlin.
compose.foundationConception d'applications Jetpack Compose avec des composants prêts à l'emploi et extension de la base pour créer vos propres éléments de système de conception.
compose.materialCréation d'UI Jetpack Compose avec des composants Material Design prêts à l'emploi. Il s'agit du point d'entrée de niveau supérieur de Compose, conçu pour fournir des composants qui correspondent à ceux décrits sur www.material.io.
compose.material3Création d'UI Jetpack Compose grâce aux composants Material Design 3, la nouvelle évolution de Material Design. Material 3 inclut des thématisations et des composants mis à jour ainsi que des fonctionnalités de personnalisation Material You telles que les couleurs dynamiques. Material 3 est conçu pour correspondre au nouveau style visuel et à l'UI du système Android 12.
compose.runtimeComposants fondamentaux du modèle de programmation et de la gestion d'état de Compose, et environnement d'exécution principal du plug-in Compose Compiler à cibler.
compose.uiComposants fondamentaux de l'interface utilisateur de Compose nécessaires pour interagir avec l'appareil, y compris la mise en page, le dessin et la saisie.

Déclarer des dépendances

Pour ajouter une dépendance sur Compose, 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 correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou de votre module :

Groovy

dependencies {
    implementation "androidx.compose.runtime:runtime:1.6.6"
    implementation "androidx.compose.runtime:runtime-livedata:1.6.6"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.6.6"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.12"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.runtime:runtime:1.6.6")
    implementation("androidx.compose.runtime:runtime-livedata:1.6.6")
    implementation("androidx.compose.runtime:runtime-rxjava2:1.6.6")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.12"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

Commentaires

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

Signaler un nouveau problème

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

Version de trace d'environnement d'exécution 1.0

Version 1.0.0-beta01

29 novembre 2023

Publication d'androidx.compose.runtime:runtime-tracing:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Version 1.0.0-alpha05

15 novembre 2023

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

Correction de bugs

  • Dépendances épinglées aux versions stables les plus basses (par exemple, compose-runtime et tracing-perfetto). Correction d'un problème qui entraînait l'apparition d'une version plus récente de l'environnement d'exécution Compose dans l'application.

Version 1.0.0-alpha04

23 août 2023

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

Nouvelles fonctionnalités

  • Compatible avec les dernières versions de Benchmark et Tracing Perfetto, ce qui permet de prendre en charge le traçage de composition au démarrage de l'application (démarrage à froid), par exemple dans AndroidX Benchmark et Android Studio (à partir de la version bêta 2 de Hedgehog).

Modifications apportées à l'API

  • Changement de nom : androidx.tracing.perfetto.Trace devient androidx.tracing.perfetto.PerfettoSdkTrace. (I44af8).
  • Assurer la cohérence des API du SDK Perfetto de traçage avec android.os.Trace. (I73ba0, b/282199917).
  • Conditions préalables pour le traçage au démarrage de l'application (Iad890).
  • Fusion des fichiers d'API expérimentaux et publics. (I0f2e1, b/278769092)

Version 1.0.0-alpha02

8 février 2023

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

Nouvelles fonctionnalités

  • Aucune modification fonctionnelle. Plusieurs optimisations de performances dans les dépendances en aval androidx.tracing:tracing-perfetto*.

Version 1.0.0-alpha01

7 septembre 2022

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

Nouvelles fonctionnalités

  • androidx.compose.runtime:runtime-tracing est une bibliothèque qui, en présence d'outils adaptés (bientôt disponibles), permet un traçage avancé dans une application Compose. Cette version initiale est 1.0.0-alpha01.

Version 1.7

Version 1.7.0-alpha07

17 avril 2024

Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha07. La version 1.7.0-alpha07 contient ces commits.

Nouvelles fonctionnalités

  • Ajout de la possibilité de fournir une composition locale calculée en fonction des valeurs d'autres compositions locales soit par défaut, à l'aide de compositionLocalWithComputedDefault(), soit en fournissant un lambda à utiliser pour calculer la valeur en utilisant providesComputed au lieu de provides.
  • La valeur d'une composition locale peut être obtenue en utilisant la propriété currentValue de la composition locale, accessible à partir du lambda calculant la valeur. Elle est utilisée à la place de current, qui n'est accessible que dans les fonctions @Composable. (Iadbc0).

Modifications apportées à l'API

  • Les objets d'état nouvellement créés sont immédiatement accessibles à partir des autres instantanés, y compris l'instantané global, avec leur état initial. Les modifications ultérieures ne sont pas visibles tant que l'instantané dans lequel l'objet a été créé n'a pas été appliqué.
  • L'état initial de mutableStateOf(), ainsi que ses versions primitives, correspond à la valeur transmise en tant que paramètre à mutableStateOf(). L'état initial de mutableStateListOf() et mutableStateMapOf() est vide.
  • Ajout de Snapshot.isInSnapshot et Snapshot.PreexistingSnapshotId, qui permettent d'activer un objet d'état afin qu'il soit immédiatement accessible à partir de l'instantané global dès sa création.
  • Les objets d'état personnalisés peuvent être accessibles immédiatement en suivant le modèle des modifications apportées aux objets instantanés intégrés. (I84a17).

Correction de bugs

  • Correction de la fusion de readObserver dans les instantanés imbriqués. Cela entraînait la sous-invalidation des états dérivés imbriqués lorsqu'ils étaient utilisés dans un snapshotFlow. (Idf138).

Version 1.7.0-alpha06

3 avril 2024

Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha06. La version 1.7.0-alpha06 contient ces commits.

Correction de bugs

  • Correction de la fourniture de valeurs uniques pour la gestion des providesDefault. (538f45)
  • Correction d'un interblocage dans le recomposeur lors de l'accès à l'horloge des frames. (07e5c6)

Version 1.7.0-alpha05

20 mars 2024

Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha05. La version 1.7.0-alpha05 contient ces commits.

Correction de bugs

  • Supprimer les modifications tardives apportées à la composition désactivée (5950bc)

Version 1.7.0-alpha04

6 mars 2024

Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha04. La version 1.7.0-alpha04 contient ces commits.

Amélioration des performances

  • Appel de Snapshot.current une fois par évaluation d'état dérivé. (ee7daf)
  • Lecture de currentRecord une fois par observation dans la composition. (b882b2)
  • Suppression de l'allocation accidentelle d'itérateurs dans snapshotFlow. (231e56)
  • Activez nonSkippingGroupOptimization pour les bibliothèques Compose. Ainsi, le code généré pour toutes les fonctions modulables non redémarrables dans androidx sera plus efficace. À l'avenir, nous prévoyons d'activer cette fonctionnalité par défaut. I(acbc08)

Version 1.7.0-alpha03

21 février 2024

Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha03. Liste des commits de la version 1.7.0-alpha03

Modifications apportées à l'API

  • Introduction d'un remplacement de groupes pour améliorer la détection des modifications. (0941b5)

Amélioration des performances

  • Amélioration de l'allocation de mémoire lors de la détection des modifications. (53e7fd)
  • Correction d'une fuite de mémoire dans l'outil Composer. (0e097d)
  • Utilisation de ScopeMap pour transmettre les invalidations lors de la recomposition. (e19a7e)
  • Optimisation du mappage des invalidations pour ne conserver que les états dérivés. (f11c44)
  • Remplacement des utilisations de IdentityArraySet par ScatterSet. (db572e)
  • Optimisation de removeScope dans ScopeMap. (bb0530)

Version 1.7.0-alpha02

7 février 2024

Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha02. Liste des commits de la version 1.7.0-alpha02

Correction de bugs

  • Invalider les lambdas composables dans les sous-compositions sur le même frame. (98301c).
  • Appelez le rappel onRelease dans le même ordre que onForgotten. (2cd790).
  • Filtrer les états modifiés qui ne sont pas observés dans snapshotFlow. (796b80).

Amélioration des performances

  • Permet de modifier l'observateur d'instantané sur place lorsqu'il est déjà transparent. (F60F30).
  • Optimisez SnapshotIdSet.lowest(). (7ae149).
  • Utilisez un fold() sans allocation dans SnapshotIdSet. (532b7d).
  • Suppression de l'allocation d'itérateur (83f96b)

Version 1.7.0-alpha01

24 janvier 2024

Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha01. Liste des commits de la version 1.7.0-alpha01

Optimisations des performances

  • Possibilité de créer des emplacements après l'ajout d'un groupe enfant. (b5960c)
  • Optimisation des modifications d'enregistrement des états d'instantané. (28c3fe)
  • Activation du mode Ignorer fort. (ed1766)

Correction de bugs

  • Prise en compte du méta paramètre par défaut dans la mémorisation intrinsèque. (096665)
  • currentCompoundHashKey a été rendu unique dans plus de cas. (D4a872)
  • Mise en œuvre des groupes lors de la fermeture d'un appel de fonction intégrée. (2a90fc)

Version 1.6

Version 1.6.6

17 avril 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.6. Aucune modification depuis la dernière version.

Version 1.6.5

3 avril 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.5. La version 1.6.5 contient ces commits.

Version 1.6.4

20 mars 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.4. La version 1.6.4 contient ces commits.

Version 1.6.3

6 mars 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.3. La version 1.6.3 contient ces commits.

Version 1.6.2

21 février 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.2. Liste des commits de la version 1.6.2

Version 1.6.1

7 février 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.1. Liste des commits de la version 1.6.1

Correction de bugs

  • Appelez le rappel onRelease dans le même ordre que onForgotten. (2cd790).
  • Filtrer les états modifiés qui ne sont pas observés dans snapshotFlow. (796b80).

Version 1.6.0

24 janvier 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.0. Liste des commits de la version 1.6.0

Changements importants depuis la version 1.5.0

Nouvelles fonctionnalités

  • Relance les exceptions avalées lors de la boucle de recomposition. (4dff9a)

Optimisations des performances

  • Optimisation des modifications d'enregistrement des états d'instantané. (28c3fe)
  • Optimisation des rememberSaveable. (f01d79)
  • Report de la relecture des états dérivés jusqu'à ce que les modifications soient enregistrées. (f38099)
  • Amélioration de l'ajout de valeurs locales de composition. (a337ea)

Correction de bugs

  • Correction de la fuite de mémoire de la table d'emplacements. (73fcfe)
  • Ignore la recomposition des sous-compositions qui seront supprimées. (Ieeb99, b/254645321).
  • Ne déclenchez des cycles de vie RememberObserver que lorsqu'ils sont stockés dans le calcul de mémorisation. (F6b4dc).
  • Limitez la capture $dirty aux lambdas intégrés. (acfca0).
  • Correction d'un problème de contenu mobile qui recevait parfois la mauvaise composition locale. (035cd6).

Version 1.6.0-rc01

10 janvier 2024

Publication d'androidx.compose.runtime:runtime-*:1.6.0-rc01. Liste des commits de la version 1.6.0-rc01

Version 1.6.0-beta03

13 décembre 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-beta03. Liste des commits de la version 1.6.0-beta03

Version 1.6.0-beta02

29 novembre 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-beta02. Liste des commits de la version 1.6.0-beta02

Version 1.6.0-beta01

15 novembre 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-beta01. Liste des commits de la version 1.6.0-beta01

Modifications apportées à l'API

  • Propager certaines valeurs de stabilité dans l'annotation (274a4c)

Correction de bugs

  • Utilisez une règle référentielle pour l'état du champ d'application local de la composition en contexte. (83361c).
  • Limitez la capture $dirty aux lambdas intégrés. (acfca0)
  • Correction d'un problème de contenu mobile qui recevait parfois la mauvaise composition locale. (035cd6)
  • Utilisez des cartes de hachage sans allocation plus rapides dans RecomposeScopeImpl. (D79494)
  • Utilisez ObjectIntMap dans DerivedState. (21862E).
  • Utilisez IntRef pour l'entier SnapshotThreadLocal dans DerivedState. (04eaf4)

Version 1.6.0-alpha08

18 octobre 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha08. Liste des commits de la version 1.6.0-alpha08

Correction de bugs

  • Ne déclenchez des cycles de vie RememberObserver que lorsqu'ils sont stockés dans le calcul de mémorisation. (F6b4dc).
  • Amélioration des allocations lors du tri des listes des invalidations. (954d63).
  • Utiliser de nouvelles cartes sans allocation dans SnapshotStateObserver. (4303ce).
  • Effacer les invalidations lorsque la composition est désactivée. (e001be).

Version 1.6.0-alpha07

4 octobre 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha07. Liste des commits de la version 1.6.0-alpha07

Modifications apportées à l'API

  • SnapshotStateList est désormais marqué comme RandomAccess pour permettre l'utilisation de la version d'indexation directe des assistants de liste à utiliser. (I5210c, b/219554654).

Version 1.6.0-alpha06

20 septembre 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha06. Liste des commits de la version 1.6.0-alpha06

Version 1.6.0-alpha05

6 septembre 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha05. Liste des commits de la version 1.6.0-alpha05

Version 1.6.0-alpha04

23 août 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha04. Liste des commits de la version 1.6.0-alpha04

Nouvelles fonctionnalités

  • Relance les exceptions avalées lors de la boucle de recomposition. (4dff9a)

Modifications apportées à l'API

  • Ajout d'une méthode pour désactiver ReusableComposition, en supprimant les observations, mais en conservant les nœuds en place. Vous pouvez réactiver la composition désactivée en appelant setContent. (Ib7f31).
  • Ajout de l'interface ReusableComposition pour gérer le cycle de vie et la réutilisation des sous-compositions. (I812d1, b/252846775)

Version 1.6.0-alpha03

9 août 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha03. Liste des commits de la version 1.6.0-alpha03

Correction de bugs

  • Correction de la nouvelle optimisation de CompositionLocalProvider. (3118e88)
  • Corrigez la façon dont les nœuds de contenu mobile sont désassemblés. (5e3d59b).

Version 1.6.0-alpha02

26 juillet 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha02. Liste des commits de la version 1.6.0-alpha02

Nouvelles fonctionnalités et améliorations des performances

  • Optimisation des rememberSaveable. (f01d79)
  • Report de la relecture des états dérivés jusqu'à ce que les modifications soient enregistrées. (f38099)
  • Amélioration de l'ajout de valeurs locales de composition. (a337ea)
  • SideEffect est marqué comme @ExplicitGroupsComposable pour éviter de générer un groupe. (I74815).
  • Éviter de comparer des cartes locales de composition lors de la réutilisation (782071)

Modifications apportées à l'API

  • Ajout d'un cas particulier de surcharge pour CompositionLocalProviders, qui évite la surcharge qui permet d'accélérer la fourniture de plusieurs valeurs, mais qui est excessive dans le cas d'une seule valeur. (I6d640, b/288169379).

Correction de bugs

  • Correction de la fuite de mémoire de la table d'emplacements. (73fcfe)
  • Correction du problème de restauration de rememberSaveable lorsque stateSaver renvoie une valeur nulle (90748c)

Version 1.6.0-alpha01

21 juin 2023

Publication d'androidx.compose.runtime:runtime-*:1.6.0-alpha01. Liste des commits de la version 1.6.0-alpha01

Correction de bugs

  • Ignore la recomposition des sous-compositions qui seront supprimées. (Ieeb99, b/254645321).
  • Réduction des allocations lors de l'application des instantanés. (I65c09).
  • Évitez de calculer readableHash dans DerivedState si l'instantané n'a pas été modifié. (68c565)

Version 1.5

Version 1.5.4

18 octobre 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.4. Liste des commits de la version 1.5.4

Version 1.5.3

4 octobre 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.3. Liste des commits de la version 1.5.3

Version 1.5.2

27 septembre 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.2. Liste des commits de la version 1.5.2

Version 1.5.1

6 septembre 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.1. Liste des commits de la version 1.5.1

Version 1.5.0

9 août 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0. Liste des commits de la version 1.5.0

Modifications apportées à l'API

  • Suppression des allocations dans la recomposition, les animations de couleur et AndroidComposeView. (Ib2bfa).
  • Ajout d'une annotation @StateFactoryMarker pour marquer des fonctions qui créent des états et doivent être encapsulées dans un appel remember. (I64550).
  • Ajout des versions primitives de State et MutableState. (fb3d89)
  • Ajout de Snapshot.isApplyObserverNotificationPending. (I672a5)
  • Ajout de versions primitives de l'API State, ce qui permet de suivre les valeurs Int, Long, Float et Double dans des objets State sans entraîner de pénalités pour autoboxing. Utilisez les nouvelles méthodes de fabrique mutableIntState(Int), mutableFloatStateOf(Float), etc. (I48e43).

Correction de bugs

  • Ignore la recomposition des sous-compositions qui seront supprimées. (Ieeb99, b/254645321).
  • Ne conserve pas la référence d'instantané dans ComposerImpl. (0206f7)
  • N'appliquez pas la composition deux fois. (f5791b)
  • Garantit l'invalidation des valeurs d'état dérivées non initialisées. (aa2a92)
  • Appelez onEndChanges pendant la suppression de la composition. (62cc8c).
  • Correction du déplacement du contenu dans une sous-composition. (4beb41)
  • Correction des interblocages potentiels (c1a425 et 8edce0)
  • Le recomposeur créé pour une fenêtre Android ne bloque désormais que les appels à withFrameNanos au lieu de toute la composition lorsqu'il reçoit une notification ON_STOP. Cela signifie que les fenêtres associées à des activités arrêtées continueront de se recomposer pour les modifications de données, mais les animations ou tout autre appelant de withFrameNanos seront bloquées. (Id9e7f, b/240975572).
  • Exécutez des rappels de désactivation pour LayoutNode avant de supprimer les effets. 3784073
  • Correction des indicateurs modifiés pour les lambdas redémarrés ea81df9
  • Correction de la régression de la modification en temps réel pour le composable avec des nœuds 73fd4d8
  • ON_STOP devrait suspendre les diffusions de l'horloge au lieu de la composition ae276f1
  • Invalide les champs d'application SnapshotStateObserver pour les états dérivés inchangés. 84d9b1c
  • Correction d'un interblocage potentiel lors de la suppression de compositions. 28761fc
  • Correction du déplacement du contenu dans une sous-composition 92d4156.
  • Correction des indicateurs modifiés pour les lambdas redémarrés. (8a03e9)
  • Exécution de rappels de désactivation pour LayoutNode avant de supprimer les effets. (8b0fa4)
  • Correction de endToMarker() lors de la fin des groupes de nœuds. (D71d980).
  • Utilisation du groupe SlotWriter actuel pour vérifier la désactivation. (a0b518b)
  • Suppression de fill dans SlotTable.moveSlotGapTo(), puis action de fermeture pour fermer. (81f9935)
  • Correction des invalidations manquantes lors du déplacement du contenu déplaçable. (1d7c024)
  • Correction des invalidations immédiates pour le contenu déplaçable déplacé. (8676618)

Amélioration des performances

  • Évitez de calculer readableHash dans DerivedState si l'instantané n'a pas été modifié. (307102).
  • Allocations réduites (I65c09, d7ea77, 727974 et 445808)
  • Annulation rapide de Compose CoroutineScopes. (a55362 et bd382f)
  • Écraser les enregistrements d'objets d'état avec des enregistrements d'état inaccessibles. (C986960)
  • Utilisation de composer du champ d'application correct lors de la création de groupes. (9a5e5b6)
  • Utilisation de IdentityArraySet pour stocker les invalidations d'instantané. (7f60cca)
  • Réduction des allocations pour les observations sur les instantanés. (5bc535f)

Version 1.5.0-rc01

26 juillet 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-rc01. Liste des commits de la version 1.5.0-rc01

Correction de bugs

  • Report de la relecture des états dérivés jusqu'à ce que les modifications soient enregistrées. (f38099)

  • Une inspection facultative permettant de recommander la migration des appels mutableStateOf() vers les types spécialisés correspondants pour les primitives est disponible. Son ID lint est AutoboxingStateCreation. Auparavant, cette inspection était activée par défaut pour tous les projets. Pour afficher cet avertissement dans l'éditeur d'Android Studio et dans les sorties lint de votre projet, remplacez sa gravité par "avertissement" (ou par un niveau supérieur) en déclarant warning "AutoboxingStateCreation" dans la configuration build.gradle ou build.gradle.kts de votre module, comme indiqué (I34f7e):

        android {
            lint {
                warning "AutoboxingStateCreation"
            }
            ...
        }
    

Version 1.5.0-beta03

28 juin 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-beta03. Liste des commits de la version 1.5.0-beta03

Correction de bugs

  • Ignore la recomposition des sous-compositions qui seront supprimées. (Ieeb99, b/254645321).

Version 1.5.0-beta02

7 juin 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-beta02. Liste des commits de la version 1.5.0-beta02

Amélioration des performances

  • Évitez de calculer readableHash dans DerivedState si l'instantané n'a pas été modifié. (307102).

Version 1.5.0-beta01

24 mai 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-beta01. Liste des commits de la version 1.5.0-beta01

Modifications apportées à l'API

  • Suppression des allocations dans la recomposition, les animations de couleur et AndroidComposeView. (Ib2bfa)
  • Ajout d'une annotation @StateFactoryMarker pour marquer des fonctions qui créent des états et doivent être encapsulées dans un appel remember. (I64550).
  • Ajout des versions primitives de State et MutableState. (fb3d89)
  • Ajout de Snapshot.isApplyObserverNotificationPending. (I672a5)

Correction de bugs

  • Allocations réduites (I65c09, d7ea77, 727974 et 445808)
  • Ne conserve pas la référence d'instantané dans ComposerImpl. (0206f7)
  • Annulation rapide de Compose CoroutineScopes. (a55362 et bd382f)
  • N'appliquez pas la composition deux fois. (f5791b)
  • Garantit l'invalidation des valeurs d'état dérivées non initialisées. (aa2a92)
  • Appelez onEndChanges pendant la suppression de la composition. (62cc8c).
  • Correction du déplacement du contenu dans une sous-composition. (4beb41)
  • Correction des interblocages potentiels. (c1a425
  • ON_STOP devrait suspendre les diffusions de l'horloge au lieu de la composition. (f4a2d1)
  • Correction des indicateurs modifiés pour les lambdas redémarrés. (8a03e9)
  • Exécution de rappels de désactivation pour LayoutNode avant de supprimer les effets. (8b0fa4)

Contribution externe

  • Ajout de Snapshot.isApplyObserverNotificationPending. (I672a5)

Version 1.5.0-alpha04

10 mai 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-alpha04. Liste des commits de la version 1.5.0-alpha04

Modifications apportées à l'API

  • Ajout de versions primitives de l'API State, ce qui permet de suivre les valeurs Int, Long, Float et Double dans des objets State sans entraîner de pénalités pour autoboxing. Utilisez les nouvelles méthodes de fabrique mutableIntState(Int), mutableFloatStateOf(Float), etc. (I48e43).

Correction de bugs

  • Appelez onEndChanges pendant la suppression de la composition. Les nœuds de sélection supprimés pendant Composition.dispose s'abonnent à onEndChanges pour réinitialiser le ciblage.(03d4a47)

  • Assurez l'invalidation des valeurs d'état dérivées non initialisées. Chaque état dérivé est associé à une liste de ses dépendances dans SnapshotStateObserver, qui permet d'invalider les champs d'application associés à l'état dérivé chaque fois que la dépendance change. Le changement de dépendance est enregistré lors de la progression de l'instantané, ce qui peut se produire après la lecture de l'état dérivé (en raison de l'appel à Snapshot.notifyObjectsInitialized()).

    La logique d'observation de l'état dérivée précédente dans SnapshotStateObserver consistait à nettoyer les anciennes dépendances, puis à lire la nouvelle valeur. Cela entraînait une condition de concurrence avec une invalidation nettoyée, où l'invalidation de dépendance n'était pas enregistrée.

    Cette modification réorganise la lecture de l'état dérivé et le nettoyage des dépendances, garantissant ainsi que l'invalidation se produit toujours dans un état valide. (c472be6).

Version 1.5.0-alpha03

19 avril 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-alpha03. Liste des commits de la version 1.5.0-alpha03

Modifications apportées à l'API

  • Le recomposeur créé pour une fenêtre Android ne bloque désormais que les appels à withFrameNanos au lieu de toute la composition lorsqu'il reçoit une notification ON_STOP. Cela signifie que les fenêtres associées à des activités arrêtées continueront de se recomposer pour les modifications de données, mais les animations ou tout autre appelant de withFrameNanos seront bloquées. (Id9e7f, b/240975572).

Correction de bugs

  • Résolution de l'interblocage potentiel dans la liste et le mappage d'instantanés 5c1a425
  • Exécutez des rappels de désactivation pour LayoutNode avant de supprimer les effets. 3784073
  • Correction des indicateurs modifiés pour les lambdas redémarrés ea81df9
  • Correction de la régression de la modification en temps réel pour le composable avec des nœuds 73fd4d8
  • ON_STOP devrait suspendre les diffusions de l'horloge au lieu de la composition ae276f1
  • Invalide les champs d'application SnapshotStateObserver pour les états dérivés inchangés. 84d9b1c
  • Correction d'un interblocage potentiel lors de la suppression de compositions. 28761fc
  • Correction du déplacement du contenu dans une sous-composition 92d4156.

Version 1.5.0-alpha02

5 avril 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-alpha02. Liste des commits de la version 1.5.0-alpha02

Nouvelles fonctionnalités

  • L'opérateur getValue de Kotlin peut désormais être composable. (f174f6e)

Correction de bugs et amélioration des performances

  • Écraser les enregistrements d'objets d'état avec des enregistrements d'état inaccessibles. (C986960)
  • Utilisation de composer du champ d'application correct lors de la création de groupes. (9a5e5b6)
  • Correction de endToMarker() lors de la fin des groupes de nœuds. (D71d980).
  • Utilisation du groupe SlotWriter actuel pour vérifier la désactivation. (a0b518b)
  • Utilisation de IdentityArraySet pour stocker les invalidations d'instantané. (7f60cca)
  • Suppression de fill dans SlotTable.moveSlotGapTo(), puis action de fermeture pour fermer. (81f9935)
  • Correction des invalidations manquantes lors du déplacement du contenu déplaçable. (1d7c024)
  • Correction des invalidations immédiates pour le contenu déplaçable déplacé. (8676618)
  • Réduction des allocations pour les observations sur les instantanés. (5bc535f)

Version 1.5.0-alpha01

22 mars 2023

Publication d'androidx.compose.runtime:runtime-*:1.5.0-alpha01. Liste des commits de la version 1.5.0-alpha01

Nouvelles fonctionnalités

  • Ajout de Modifier.Node#coroutineScope pour permettre à Modifier.Nodes de lancer des coroutines. (I76ef9)
  • Autorisez Modifier.Nodes à lire CompositionLocals en implémentant l'interface CompositionLocalConsumerModifierNode. (Ib44df).

Version 1.4

Version 1.4.3

3 mai 2023

Publication d'androidx.compose.runtime:runtime-*:1.4.3 sans aucune modification.

Version 1.4.2

19 avril 2023

Publication d'androidx.compose.runtime:runtime-*:1.4.2. Liste des commits de la version 1.4.2

Correction de bugs

  • Résolution de l'interblocage potentiel dans la liste et le mappage d'instantanés 2eb6570.

  • L'ajout de contenu à une SnapshotStateList ou à une SnapshotStateMap peut rencontrer un interblocage si la modification est simultanée avec une écriture directe dans l'enregistrement d'état. Ce problème est désormais bien plus probable avec les modifications introduites par 93fcae828b, qui utilise les écritures directes pour libérer les enregistrements inutilisés.

  • Les verrous sont désormais organisés de façon à ce qu'aucun verrouillage d'instantané ne soit tenté d'être pris lorsqu'un verrouillage de carte ou de liste est maintenu.

Version 1.4.1

5 avril 2023

Publication d'androidx.compose.runtime:runtime-*:1.4.1. Liste des commits de la version 1.4.1

Correction de bugs

  • Correction de endToMarker() lors de la fin des groupes de nœuds. d71d980

Version 1.4.0

22 mars 2023

Publication d'androidx.compose.runtime:runtime-*:1.4.0. Liste des commits de la version 1.4.0

Changements importants depuis la version 1.3.0

  • Utiliser la valeur initialisée à partir de LiveData pour la première composition 3680e25
  • Ajout de ComposeNodeLifecycleCallback pour observer le cycle de vie des nœuds Compose. 8b6a258.
  • Ajouter la propriété parameterTypes à ComposableMethod 7b6c7ad

Correction de bugs et amélioration des performances

  • Effacez les deux index de champ d'application dans SnapshotStateObserver. 29f4a3e
  • Ajout des groupes nécessaires dans le corps des lambdas non désactivables. 7d06752
  • Amélioration des caractéristiques de référence de la mémoire pour l'état de l'instantané 93fcae8
  • Suppression des cases dans les recherches locales dans une composition. 0875717
  • Utilisation de la clé correcte pour les groupes de nœuds non réutilisables 6388d8d
  • Protéger SnapshotStateObserver contre les applications récursives et simultanées. 98cb6ba
  • Ajout d'une vérification des limites de l'index de contrôle dans la méthode "get" de IdentityArraySet. 35a77d3
  • Mise à jour du module Compose pour utiliser les extensions ViewTreeLifecycleOwner. 21c2122
  • Envoyer des notifications d'application une fois que le recomposeur a terminé le cadrage. 98f2641.
  • Correction du plantage de l'index hors limites lors de l'annulation du recomposeur 8f8656f
  • Toujours forcer la recomposition si les fournisseurs parents de la composition ont modifié 9526fcc
  • Tolérance du recomposeur pour les tâches annulées a55f7ed
  • Amélioration de la gestion des invalidations pour un grand nombre de compositeurs. 9b7ed67
  • Correction de la génération de groupes de fermeture pour les retours non locaux. b6f590c

Version 1.4.0-rc01

8 mars 2023

Publication d'androidx.compose.runtime:runtime-*:1.4.0-rc01. Liste des commits de la version 1.4.0-rc01

Correction de bugs

Version 1.4.0-beta02

22 février 2023

Publication d'androidx.compose.runtime:runtime:1.4.0-beta02 et d'androidx.compose.runtime:runtime-saveable:1.4.0-beta02. Liste des commits de la version 1.4.0-beta02

Version 1.4.0-beta01

8 février 2023

Publication d'androidx.compose.runtime:runtime-*:1.4.0-beta01. Liste des commits de la version 1.4.0-beta01

Modifications apportées à l'API

  • ComposeNodeLifecycleCallback a été ajouté pour observer le cycle de vie des nœuds Compose. (I3731b)
  • Ajout de @TestOnly à Composer.disableSourceInformation(), car cette fonction ne peut être appelée que lors d'un test. (I896c8)

Correction de bugs

  • Suppression des cases dans les recherches locales dans une composition. (62f66a)
  • Amélioration des caractéristiques de référence de la mémoire pour l'état de l'instantané. (dfb451)

Version 1.4.0-alpha05

25 janvier 2023

Publication d'androidx.compose.runtime:runtime:1.4.0-alpha05 et d'androidx.compose.runtime:runtime-saveable:1.4.0-alpha05. Liste des commits de la version 1.4.0-alpha05

Modifications apportées à l'API

  • Plus de types/possibilités de valeurs nulles pour les fonctions intégrées/obsolètes ou masquées (I24f91)

Version 1.4.0-alpha04

11 janvier 2023

Publication d'androidx.compose.runtime:runtime-*:1.4.0-alpha04. Liste des commits de la version 1.4.0-alpha04

Modifications apportées à l'API

  • TestMonotonicFrameClock utilise désormais la bonne annotation expérimentale. (I95c9e)

Correction de bugs

  • Protection de SnapshotStateObserver contre les notifications d'application de modifications récursives et simultanées (d902fb)

Version 1.4.0-alpha03

7 décembre 2022

Publication d'androidx.compose.runtime:runtime-*:1.4.0-alpha03. Liste des commits de la version 1.4.0-alpha03

Modifications apportées à l'API

  • Ajout d'une nouvelle méthode publique à la classe ComposableMethod, semblable à java.lang.reflect.Method#getParameterTypes() (Iab0c3)

Correction de bugs

  • Les notifications d'application d'instantanés sont désormais envoyées une fois que Recomposer a terminé d'appliquer les modifications. (Iad6c0, b/222093277)

Version 1.4.0-alpha02

9 novembre 2022

Publication d'androidx.compose.runtime:runtime-*:1.4.0-alpha02. Liste des commits de la version 1.4.0-alpha02

Version 1.4.0-alpha01

24 octobre 2022

Publication d'androidx.compose.runtime:runtime-*:1.4.0-alpha01. Liste des commits de la version 1.4.0-alpha01

Modifications apportées à l'API

  • SnapshotStateList et SnapshotStateMap ont maintenant des implémentations explicites de toList() et toMap(), respectueusement. Ces méthodes renvoient leur contenu actuel sans produire de copie, car elles renvoient les données immuables internes utilisées pour stocker leur contenu. Cette valeur peut être utilisée, par exemple, pour générer un flux de valeurs à l'aide de snapshotFlow sans avoir à copier les données. (Ica2bd).

Version 1.3

Version 1.3.3

11 janvier 2023

Publication d'androidx.compose.runtime:runtime-*:1.3.3. Liste des commits de la version 1.3.3.

  • Aucune modification par rapport à la version 1.3.2

Version 1.3.2

7 décembre 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.2. Liste des commits de la version 1.3.2

Correction de bugs

  • Mise à jour pour prendre en charge androidx.compose.ui 1.3.2

Version 1.3.1

9 novembre 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.1. Liste des commits de la version 1.3.1

Version 1.3.0

24 octobre 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0. Liste des commits de la version 1.3.0

Changements importants depuis la version 1.2.0

Gestion des exceptions/Assistance pour la modification en temps réel

Traçage de composition

API Composable Reflection

Correctifs d'exécution

Système d'instantanés

Version 1.3.0-rc01

5 octobre 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0-rc01. Liste des commits de la version 1.3.0-rc01.

Correction de bugs

  • Correction d'ArrayIndexOutOfBoundsException provenant de la table d'emplacements (b/249076084)

Version 1.3.0-beta03

21 septembre 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0-beta03. Liste des commits de la version 1.3.0-beta03

Modification destructive affectant le comportement

  • Les paramètres remember et rememberCoroutineScope ont été remplacés par crossinline. Cela permet de signaler une erreur en cas de retour anticipé au lieu d'autoriser un retour anticipé, ce qui entraînerait une erreur interne ultérieure.
  • Cette modification peut potentiellement entraîner le signalement de nouvelles erreurs de compilation, ce qui nécessite la suppression des retours non locaux des lambdas transmis à ces fonctions. (Ibea62)

Version 1.3.0-beta02

7 septembre 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0-beta02. Liste des commits de la version 1.3.0-beta02.

Correction de bugs

  • Mise à jour de l'API. (I64ca0)

Version 1.3.0-beta01

24 août 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0-beta01. Liste des commits de la version 1.3.0-beta01

Modifications apportées à l'API

  • Une méthode find a été ajoutée à CompositionData pour permettre aux outils de développement utilisant cette API de trouver rapidement un sous-groupe de composition utilisant son identité. (I5794f)

Version 1.3.0-alpha03

10 août 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0-alpha03. Liste des commits de la version 1.3.0-alpha03

Version 1.3.0-alpha02

27 juillet 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0-alpha02. Liste des commits de la version 1.3.0-alpha02

Modifications apportées à l'API

  • ComposerKt.traceEventStart(Int, String) ajouté à nouveau pour assurer la rétrocompatibilité. (I6e6de)

Version 1.3.0-alpha01

29 juin 2022

Publication d'androidx.compose.runtime:runtime-*:1.3.0-alpha01. Liste des commits de la version 1.3.0-alpha01

Modifications apportées à l'API

  • Migration de la fonction utilitaire vers l'environnement d'exécution. (I4f729)

Version 1.2

Version 1.2.1

10 août 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.1. Liste des commits de la version 1.2.1

Correction de bugs

  • Correction d'une fuite de mémoire : suppression des instantanés imbriqués créés à partir d'instantanés transparents. b/239603305

Version 1.2.0

27 juillet 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0. Liste des commits de la version 1.2.0

Changements importants depuis la version 1.1.0

  • L'environnement d'exécution Compose comprend quelques fonctionnalités qui ont été introduites dans la version 1.2.0, ainsi que de nombreuses corrections de bugs pour stabiliser l'ensemble. La nouvelle fonctionnalité la plus importante est l'ajout de l'API movableContentOf, qui permet de prendre en charge l'expérience utilisateur complexe, comme les transitions d'éléments partagés. L'API movableContentOf convertit un lambda composable en lambda qui déplace son état et les nœuds correspondants vers tout nouvel emplacement où il est appelé. Lorsque l'appel précédent sort de la composition, l'état est temporairement conservé. Si un nouvel appel au lambda entre dans la composition, l'état et les nœuds associés sont déplacés vers l'emplacement du nouvel appel. Si aucun nouvel appel n'est ajouté, l'état est supprimé définitivement et les observateurs de mise en mémoire sont notifiés.

  • Si un lambda movableContentOf est appelé plusieurs fois dans la même composition, un état et des nœuds sont créés pour chaque appel. L'état est ensuite déplacé lorsque les appels quittent la composition et que de nouveaux appels y sont ajoutés. L'état du premier appel sortant passe au premier appel entrant, et ainsi de suite, dans l'ordre d'appel. Tous les états non revendiqués par de nouveaux appels sont définitivement supprimés.

  • En plus de cela et de quelques autres nouvelles fonctionnalités, la stabilisation de l'environnement d'exécution et du système d'état des instantanés a pris beaucoup de temps. Plusieurs fuites de mémoire ont été supprimées et les chemins de code ont été optimisés.

  • Vous trouverez ci-dessous un récapitulatif des modifications :

Nouvelles fonctionnalités de la version 1.2

Performances de la version 1.2

Corrections de bugs dans la version 1.2

Version 1.2.0-rc03

29 juin 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-rc03. Liste des commits de la version 1.2.0-rc03

Correction de bugs

  • Auparavant, les observations de l'état dérivé étaient supprimées de manière inconditionnelle du niveau d'accès de la recomposition et de la composition, ce qui interrompait les autres niveaux d'accès qui pouvaient encore observer l'état dérivé. Cette modification permet de supprimer les instances d'état dérivé uniquement si elles ne sont plus observées par d'autres niveaux d'accès. (b/236618362)

Version 1.2.0-rc02

22 juin 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-rc02. Liste des commits de la version 1.2.0-rc02

Version 1.2.0-rc01

15 juin 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-rc01. Liste des commits de la version 1.2.0-rc01

Modifications apportées à l'API

  • Mise à jour des interfaces dans les bibliothèques Compose, désormais créées à l'aide des méthodes d'interface jdk8 par défaut (I5bcf1)

Version 1.2.0-beta03

1er juin 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-beta03. Liste des commits de la version 1.2.0-beta03

Version 1.2.0-beta02

18 mai 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-beta02. Liste des commits de la version 1.2.0-beta02

Version 1.2.0-beta01

11 mai 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-beta01. Liste des commits de la version 1.2.0-beta01

Nouvelles fonctionnalités

  • Première publication bêta de la version 1.2.

Modifications apportées à l'API

  • Ajout de la propriété expérimentale Snapshot.unsafeEnter/unsafeLeave. (I108f3)
  • Ajout de l'API expérimentale Snapshot.asContextElement(). (Iff072)
  • Mise à jour des annotations @ComposableTarget, ainsi que celles marquées par @ComposableTargetMarker, qui peuvent désormais être utilisées au niveau du fichier avec le préfixe @file. Utiliser une annotation cible au niveau du fichier indique au compilateur que toutes les fonctions modulables du fichier sont destinées à la cible associée. Par exemple, utiliser @file:UiComposable revient à déclarer que toutes les fonctions @Composable ciblent l'interface utilisateur de Compose. Une fonction qui doit s'appliquer à une autre cible doit fournir explicitement l'annotation repère correspondante. (I40804)

Version 1.2.0-alpha08

20 avril 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha08. Liste des commits de la version 1.2.0-alpha08

Modifications apportées à l'API

  • Ajout de TracingInProgress à l'interface CompositionTracer. (Ic6f12)
  • Ajout de recomposeScopeIdentity à Composer (I0c873).
  • API de traçage restreintes (Composer.setTracer) à OptIn(InternalComposeTracingApi). (I9187f)
  • Ajout de ResuableContentHost, qui permet de mieux contrôler la durée de vie de l'état créé pour le contenu réutilisable. Par exemple, si une sous-composition n'est temporairement pas utilisée, le contenu peut être désactivé, ce qui entraîne l'oubli de l'état mémorisé dans la composition (par exemple, tous les effets jetables). (I2c0f2, b/220322704)

Version 1.2.0-alpha07

6 avril 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha07. Liste des commits de la version 1.2.0-alpha07

Modifications apportées à l'API

  • Ajout d'une fonction Snapshot.withoutReadObservation { ... }. Elle permet aux utilisateurs d'exécuter le lambda transmis sans s'abonner aux modifications des valeurs d'état lues dans ce bloc. Cette fonction peut s'avérer utile lorsque vous souhaitez bénéficier de lectures/écritures thread-safe basées sur une capture instantanée tout en conservant la possibilité de lire la valeur sans provoquer de recomposition ni de nouvelles mesures inutiles. (I9f365, b/214054486)

Version 1.2.0-alpha06

23 mars 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha06. Liste des commits de la version 1.2.0-alpha06.

Version 1.2.0-alpha05

9 mars 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha05. Liste des commits de la version 1.2.0-alpha05

Contribution externe

  • Mise à jour permettant d'utiliser les coroutines Kotlinx 1.6.0. (I3366d)

Version 1.2.0-alpha04

23 février 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha04. Liste des commits de la version 1.2.0-alpha04

Modifications apportées à l'API

  • Ajout de ComposableTarget, ComposableTargetMarker et ComposableOpenTarget pour signaler au moment de la compilation qu'une fonction modulable s'applique à la mauvaise cible.

    La plupart du temps, les annotations peuvent être déduites du plug-in de compilation Compose. Elles sont donc rarement utilisées directement. Il est impossible de déduire les annotations dans les cas suivants : lors de la création et de l'utilisation d'un applicateur personnalisé, de fonctions modulables abstraites (telles que les méthodes d'interface), de champs ou de variables globales qui sont des lambdas modulables (les variables locales et les paramètres sont déduits), ou lorsque vous utilisez ComposeNode ou une fonction modulable associée.

    Pour les applicateurs personnalisés, les fonctions modulables qui appellent ComposeNode ou ReusableComposeNode doivent ajouter une annotation CompoableTarget pour la fonction et un type de paramètre lambda de composable. Il est toutefois recommandé de créer une annotation marquée avec ComposableTargetMarker, puis d'utiliser l'annotation marquée plutôt que d'utiliser directement ComposableTarget. Une annotation composable marquée avec ComposableTargetMarker équivaut à un ComposbleTarget avec le nom complet de la classe d'attribut en tant que paramètre d'applicateur. Pour obtenir un exemple d'utilisation de ComposableTargetMarker, reportez-vous à anroidx.compose.ui.UiComposable. (I38f11)

Version 1.2.0-alpha03

9 février 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha03. Liste des commits de la version 1.2.0-alpha03

Modifications apportées à l'API

  • Ajout de movableContentOf, qui convertit un lambda composable en lambda qui déplace son état et les nœuds correspondants vers tout nouvel emplacement où il est appelé. Lorsque l'appel précédent sort de la composition, l'état est temporairement conservé. Si un nouvel appel au lambda entre dans la composition, l'état et les nœuds associés sont déplacés vers l'emplacement du nouvel appel. Si aucun nouvel appel n'est ajouté, l'état est supprimé définitivement et les observateurs de mise en mémoire sont notifiés.

    Si un lambda movableContentOf est appelé plusieurs fois dans la même composition, un état et des nœuds sont créés pour chaque appel. L'état est ensuite déplacé lorsque les appels quittent la composition et que de nouveaux appels y sont ajoutés. L'état du premier appel sortant passe au premier appel entrant, et ainsi de suite, dans l'ordre d'appel. Tous les états non revendiqués par de nouveaux appels sont définitivement supprimés. (Ib4850)

  • Ajout d'une API de traçage à la composition pour permettre aux outils de fournir un traçage plus détaillé des fonctions modulables. Le compilateur génère désormais des appels vers l'API de traçage qui incluent des informations sources. (Ib0eb5)

    Pour supprimer ces appels et les informations sources associées d'un build, ajoutez la règle ProGuard suivante :

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • Ajout de InternalComposeScope, qui permet aux outils d'identifier un composable lors des recompositions. (I07a3f)

Version 1.2.0-alpha02

26 janvier 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha02. Liste des commits de la version 1.2.0-alpha02

Version 1.2.0-alpha01

12 janvier 2022

Publication d'androidx.compose.runtime:runtime-*:1.2.0-alpha01. Liste des commits de la version 1.2.0-alpha01

Modifications apportées à l'API

  • Ajout d'un champ identity à CompositionData pour générer des ID invariables dans l'outil d'inspection de la mise en page. (Ic116e)

Mises à jour des dépendances

  • Mise à jour des dépendances vers Kotlin 1.6.10.

Version 1.1

Version 1.1.1

23 février 2022

Publication d'androidx.compose.runtime:runtime-*:1.1.1. Liste des commits de la version 1.1.1

Correction de bugs

  • Correction d'une exception NullPointerException dans androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList. (aosp/1947059, b/206677462)
  • Correction du plantage causé par le contenu du presse-papiers lors de la lecture du presse-papiers sur Android. (I06020, b/197769306)
  • Résolution du problème de lecture de droite à gauche dans LazyVerticalGrid. (aosp/1931080, b/207510535)

Version 1.1.0

9 février 2022

Publication d'androidx.compose.runtime:runtime-*:1.1.0. Liste des commits de la version 1.1.0

Modifications importantes depuis la version 1.0.0

  • Stabilisation de la prise en charge du défilement hors limites d'Android 12.
  • Améliorations apportées au dimensionnement des zones cibles tactiles.
  • Notez que, dans Compose 1.0, les composants Material développent leur espace de mise en page pour respecter les consignes d'accessibilité Material concernant la taille des zones cibles tactiles. Par exemple, la zone cible tactile minimale d'un bouton est de 48x48dp et sera étendue si le paramètre indique une dimension inférieure. Cela permet d'aligner la bibliothèque Compose Material sur le comportement des composants Material Design, pour plus de cohérence si vous combinez le système de vues et Compose. Cette modification garantit également que les conditions minimales requises pour l'accessibilité des zones cibles tactiles sont remplies lorsque vous créez votre UI à l'aide de composants Compose Material.
  • Stabilisation de la prise en charge du rail de navigation.
  • Reclassement d'un certain nombre d'API expérimentales en version stable.
  • Prise en charge des nouvelles versions de Kotlin.

Version 1.1.0-rc03

26 janvier 2022

Publication d'androidx.compose.runtime:runtime-*:1.1.0-rc03. Liste des commits de la version 1.1.0-rc03

Correction de bugs

  • Mise à jour pour prendre en charge Material Compose 1.1.0-rc03.

Version 1.1.0-rc01

15 décembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-rc01. Liste des commits de la version 1.1.0-rc01

Version 1.1.0-beta04

1er décembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-beta04. Liste des commits de la version 1.1.0-beta04

Nouvelles fonctionnalités

  • Mise à jour pour assurer la compatibilité avec Kotlin 1.6.0

Version 1.1.0-beta03

17 novembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-beta03. Liste des commits de la version 1.1.0-beta03

Version 1.1.0-beta02

3 novembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-beta02. Liste des commits de la version 1.1.0-beta02

Modifications apportées à l'API

  • Le code des instantanés a été divisé sur plusieurs fichiers, mais ils se trouvent toujours dans la même classe JVM. (Ic6c98)

Version 1.1.0-beta01

27 octobre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-beta01. Liste des commits de la version 1.1.0-beta01

Version 1.1.0-alpha06

13 octobre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-alpha06. Liste des commits de la version 1.1.0-alpha06

Modifications apportées à l'API

  • Suppression de InternalCompilerApi des méthodes Composer devant être appelées entre les modules. (I1aa0b)
  • Abandon de Recomposer.state, remplacé par Recomposer.currentState afin de lui attribuer le type StateFlow. (Ic2ab3, b/197773820)

Version 1.1.0-alpha05

29 septembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-alpha05. Liste des commits de la version 1.1.0-alpha05.

Version 1.1.0-alpha04

15 septembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-alpha04. Liste des commits de la version 1.1.0-alpha04.

Version 1.1.0-alpha03

1er septembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-alpha03. Liste des commits de la version 1.1.0-alpha03

Nouvelles fonctionnalités

  • Le compilateur Compose est désormais compatible avec les anciennes versions de l'environnement d'exécution Compose (1.0). Avant cette modification, le compilateur Compose n'était compatible qu'avec l'environnement d'exécution Compose de la même version ou d'une version ultérieure. Après cette modification, le compilateur Compose est compatible avec une ancienne version de l'environnement d'exécution Compose (1.0). (aosp/1796968)
  • Mise à jour des dépendances Compose 1.1.0-alpha03 vers Kotlin 1.5.30. (I74545)

Version 1.1.0-alpha02

18 août 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-alpha02. Liste des commits de la version 1.1.0-alpha02

Version 1.1.0-alpha01

4 août 2021

Publication d'androidx.compose.runtime:runtime-*:1.1.0-alpha01. Liste des commits de la version 1.1.0-alpha01

Version 1.0

Version 1.0.5

3 novembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.5. Liste des commits de la version 1.0.5

Correction de bugs

  • Correction d'un plantage lié au suivi des instances de derivedStateOf. (aosp/1792247)

Version 1.0.4

13 octobre 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.4. Liste des commits de la version 1.0.4

Mises à jour des dépendances

  • Mise à jour des dépendances vers Kotlin 1.5.31

Version 1.0.3

29 septembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.3. Liste des commits de la version 1.0.3

Mises à jour des dépendances

  • Mise à jour des dépendances vers Kotlin 1.5.30

Version 1.0.2

1er septembre 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.2. Liste des commits de la version 1.0.2

Mise à jour pour prendre en charge la version 1.0.2 de Compose. Compose 1.0.2 reste compatible avec Kotlin 1.5.21.

Version 1.0.1

4 août 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.1. Liste des commits de la version 1.0.1

Mises à jour des dépendances

  • Mise à jour des dépendances vers Kotlin 1.5.21

Version 1.0.0

28 juillet 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0. Liste des commits de la version 1.0.0

Principales fonctionnalités de la version 1.0.0

Première version stable de Compose. Pour en savoir plus, consultez le blog officiel des publications de Compose.

Problèmes connus

  • Si vous utilisez Android Studio Bumblebee Canary 4 ou AGP 7.1.0-alpha04/7.1.0-alpha05, vous risquez de rencontrer le plantage suivant :

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    Pour résoudre ce problème, augmentez temporairement la valeur minSdkVersion à 24 ou au-delà dans votre fichier build.gradle. Ce problème sera résolu dans la prochaine version d'Android Studio Bumblebee et AGP 7.1. (b/194289155)

Version 1.0.0-rc02

14 juillet 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-rc02. Liste des commits de la version 1.0.0-rc02.

  • Correction des conditions de concurrence dans SnapshotStateObserver entraînant des exceptions NullPointerExceptions. (aosp/1763445, aosp/1758105, b/192677711)
  • Correction des problèmes d'instantanés d'exécution qui entraînaient des plantages java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied. (b/193006595, b/192570897)

Version 1.0.0-rc01

1er juillet 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-rc01. Liste des commits de la version 1.0.0-rc01.

Version 1.0.0-beta09

16 juin 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta09. Liste des commits de la version 1.0.0-beta09.

Nouvelles règles de profil

Cette version ajoute des règles de profil aux modules de composition suivants. (I14ed6)

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

Que sont les règles de profil ?

  • Les règles de profil d'une bibliothèque sont spécifiées dans un fichier texte baseline-prof.txt, situé dans le répertoire src/main ou un répertoire équivalent. Le fichier spécifie une règle par ligne. Dans ce cas, une règle correspond à un modèle mis en correspondance avec des méthodes ou des classes de la bibliothèque. La syntaxe de ces règles correspond à un sur-ensemble du format de profil ART intelligible, utilisé conjointement à adb shell profman --dump-classes-and-methods .... Ces règles prennent l'une des deux formes suivantes pour cibler des méthodes ou des classes.

  • Une règle de méthode adoptera le format suivant :

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Une règle de classe adoptera le format suivant :

    <CLASS_DESCRIPTOR>
    
  • Dans le cas présent, <FLAGS> désigne un ou plusieurs des caractères H, S et P et indique si cette méthode doit être signalée comme "Hot", "Startup" ou "Post Startup".

  • <CLASS_DESCRIPTOR> est le descripteur de la classe à laquelle appartient la méthode ciblée. Par exemple, la classe androidx.compose.runtime.SlotTable aurait comme descripteur Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> est la signature de la méthode, et inclut le nom, les types de paramètres et les types renvoyés de la méthode. Par exemple, la méthode fun isPlaced(): Boolean sur LayoutNode aurait pour signature isPlaced()Z.

  • Ces modèles peuvent comporter des caractères génériques (**, * et ?) pour qu'une même règle affecte plusieurs méthodes ou classes.

Quel effet ont ces règles ?

  • Une méthode associée à l'indicateur H signale qu'il s'agit d'une méthode "hot" qui doit être compilée à l'avance.

  • Une méthode associée à l'indicateur S signale qu'il s'agit d'une méthode appelée au démarrage, qui doit être compilée à l'avance pour éviter les coûts de compilation et d'interprétation de la méthode lors du démarrage.

  • Une méthode associée à l'indicateur P signale qu'il s'agit d'une méthode appelée après le démarrage.

  • La présence d'une classe dans ce fichier indique qu'elle est utilisée au démarrage et doit être préallouée dans le tas de mémoire pour éviter son coût de chargement.

Comment ça marche ?

  • Les bibliothèques peuvent définir ces règles, qui seront packagées dans des artefacts AAR. Lorsqu'une application contenant ces artefacts est créée, ces règles sont fusionnées puis utilisées pour créer un profil ART binaire compact spécifique à l'application. ART peut ensuite exploiter ce profil lorsque l'application est installée sur des appareils, afin de compiler à l'avance un sous-ensemble spécifique de l'application, ce qui permet d'améliorer ses performances, notamment lors de la première exécution. Notez que cette opération n'a aucune incidence sur les applications débogables.

Version 1.0.0-beta08

2 juin 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta08. Liste des commits de la version 1.0.0-beta08

Modifications apportées à l'API

  • State<T> est désormais State<out T>. (I69049)
  • Modification de l'API ControlledComposition pour permettre la recomposition des modifications en un passage unique. (Iaafd1, b/184173932)

Version 1.0.0-beta07

18 mai 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta07. Liste des commits de la version 1.0.0-beta07

Modifications apportées à l'API

  • Ajout d'API de compilation pour Compose qui permettent de supprimer les informations sources générées par le compilateur lors de la minimisation de la source. (Ia34e6)
  • Ajout de ReusableContent, qui tente de réutiliser les nœuds dans son contenu au lieu de les remplacer lorsque la clé est modifiée. Lorsque la clé est modifiée, les valeurs précédentes de la table des emplacements pour le contenu sont ignorées, à l'exception des nœuds générés et des valeurs utilisées pour mettre à jour les nœuds.

    Ajout de ReusableComposeNode, qui va réutiliser le nœud émis au lieu de le remplacer, comme c'est le cas pour ComposeNode. (I1dd86)

  • Mise à jour de @ComposeCompilerApi, qui n'est plus @RequiresOptIn (Iab690)

Correction de bugs

  • Mise à jour de LazyColumn/Row, qui conserve désormais jusqu'à deux éléments visibles précédemment actifs (non supprimés), même si ces éléments sont déjà hors écran suite au défilement. Cela permet au composant de réutiliser les sous-compositions actives lorsqu'un nouvel élément doit être composé, ce qui améliore les performances de défilement. (Ie5555)

Version 1.0.0-beta06

5 mai 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta06. Liste des commits de la version 1.0.0-beta06

Modifications apportées à l'API

  • Mise à jour de @ComposeCompilerApi, qui n'est plus @RequiresOptIn (Iab690)

Version 1.0.0-beta05

21 avril 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta05. Liste des commits de la version 1.0.0-beta05

Modifications apportées à l'API

  • Suppression de @InternalComposeApi pour l'enregistrement de lectures et d'écritures d'instantanés. (Id134d)

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

7 avril 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta04. Liste des commits de la version 1.0.0-beta04.

Correction de bugs

  • Correction d'un bug qui permettait d'ignorer les fonctions modulables locales en fonction de leurs paramètres. Désormais, aucune fonction modulable locale ne sera ignorée. Il est courant et attendu que les fonctions locales capturent les paramètres du parent. Les ignorer ensuite générait fréquemment des bugs.

    Pour résumer, prenons l'exemple suivant :

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button(onClick={ onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    Avant cette modification, la fonction modulable ShowCount était toujours ignorée, même après la mise à jour du paramètre count. Ce n'est plus le cas. (I5648a)

  • Correction du problème lié à la restauration de l'ancienne valeur par rememberSaveable() lors de l'utilisation de paramètres d'entrée. (I1b110, b/182403380)

Version 1.0.0-beta03

24 mars 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta03. Liste des commits de la version 1.0.0-beta03

Modifications apportées à l'API

  • Abandon de DefaultMonotonicFrameClock. Désormais, appeler withFrameNanos ou Recomposer.runRecomposeAndApplyChanges sans MonotonicFrameClock génère une exception IllegalStateException. (I4eb0d)

Version 1.0.0-beta02

10 mars 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta02. Liste des commits de la version 1.0.0-beta02

Correction de bugs

  • Application forcée des restrictions sur l'utilisation publique des API expérimentales. (I6aa29, b/174531520)
  • Correction de la défaillance de rememberSaveable { mutableStateOf(0) } lors de son utilisation dans une destination de navigation-compose. (I1312b, b/180042685, b/180701630)

Version 1.0.0-beta01

24 février 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Première publication bêta de la version 1.0.0 de Compose.

Modifications apportées à l'API

  • Ajout de l'API expérimentale Recomposer.runRecomposeConcurrentlyAndApplyChanges pour recomposer des compositions non validées de la boucle de cadre principal. (I342d0)
  • Tous les composables marqués avec @ReadOnlyComposable sont maintenant validés à la compilation pour s'assurer qu'ils n'appellent que d'autres @ReadOnlyComposables. (I58961).
  • Mise à jour de defaultFactory pour compositionLocalOf et staticCompositionLocalOf, désormais obligatoire plutôt que facultatif.

    Cette modification élimine une erreur de type potentielle pour les types non nullables pour lesquels aucune fabrique par défaut n'était fournie. Auparavant, une référence nulle pouvait être fournie pour un type ne pouvant l'accepter.

    Pour les types nullables, envisagez de définir { null } comme fabrique par défaut.

    Nous vous déconseillons d'utiliser des valeurs locales avec des types non nullables, sauf si une valeur par défaut logique peut être fournie. S'il n'existe aucune valeur par défaut pertinente, le lambda defaultFactory doit générer une exception. Toutefois, générer une exception signifie que les consommateurs de la valeur locale auront une dépendance implicite quant à la mise à disposition de celle-ci, qui n'est pas forcée par le système de types. (Ifbd2a)

  • Les symboles obsolètes ont été supprimés de l'environnement d'exécution de Compose. (I3252c).

  • Suppression de emptyContent(), désormais obsolète. Utilisez {} à la place. (Idb33f, b/179432510)

  • Changement de nom : Providers devient CompositionLocalProvider.

    • Abandon du constructeur de composition, qui n'accepte plus de paramètre de clé.
    • Conversion de la fonction modulable de premier niveau currentCompositeKeyHash en propriété de premier niveau pour composable.
    • Déplacement de CompositionData et CompositionGroup vers l'espace de noms androidx.compose.runtime.tooling.
    • Conversion de la classe concrète ComposableLambda en interface sans paramètres de type.
    • Conversion de la classe concrète ComposableLambdaN en interface sans paramètres de type.
    • Déplacement de la fonction snapshotFlow vers l'espace de noms androidx.compose.runtime.
    • Reclassement de la méthode de fusion de SnapshotMutationPolicy, qui n'est plus en phase expérimentale.
    • Suppression de la fonction clearRoots @TestOnly, qui n'était plus nécessaire.
    • Suppression des fonctions keySourceInfoOf et resetSourceInfo, qui n'étaient plus nécessaires.
    • Suppression de Composer.collectKeySourceInformation, qui n'était plus nécessaire.
    • Suppression des méthodes isJoinedKey, joinedKeyLeft et joinedKeyRight, qui n'étaient plus nécessaires.
    • Déplacement et réorganisation de différentes API de premier niveau dans différents fichiers. En raison de la sémantique des classes de fichiers en Kotlin, ces changements empêcheront la compatibilité binaire, mais n'affecteront pas la compatibilité avec la source. La plupart des utilisateurs ne devraient donc pas rencontrer de problème.
    • (I99b7d, b/177245490)
  • Reclassement de SnapshotStateObserver, qui n'est plus en phase expérimentale. (Id2e6a)

  • Suppression d'API précédemment abandonnées. (Ice5da, b/178633932)

  • Modifications apportées à l'API Material :

    • Ajout du paramètre contentPadding à Top/BottomAppBar pour permettre la personnalisation de la marge intérieure par défaut.
    • Réorganisation des paramètres dans BackdropScaffold, afin de respecter les consignes d'API concernant la précédence des paramètres obligatoires sur les paramètres facultatifs.
    • Déplacement du paramètre icon de BottomNavigationItem, après selected et onClick.
    • Changement de nom : dans BottomNavigationItem, alwaysShowLabels devient alwaysShowLabel.
    • Renommage des paramètres bodyContent, qui deviennent simplement content dans quelques composants.
    • Réorganisation des paramètres dans ButtonDefaults.buttonColors(). Étant donné que le type des paramètres n'a pas changé, cela ne générera pas d'erreur dans votre code. Assurez-vous cependant d'utiliser des paramètres nommés ou de mettre à jour l'ordre manuellement, sinon le fonctionnement de votre code sera altéré.
    • Ajout du paramètre secondaryVariant à darkColors(). Cette couleur est généralement la même que secondary dans le thème sombre. Le paramètre est ajouté pour améliorer la cohérence et les possibilités de personnalisation.
    • Suppression de ElevationDefaults et animateElevation() de la surface de l'API publique, car ils n'étaient pas utiles et rarement utilisés.
    • Changement de nom : dans Slider, onValueChangeEnd devient onValueChangeFinished, et peut désormais être nul.
    • Changement de nom : dans Snackbar, le paramètre text devient content pour plus de cohérence.
    • Ajout du paramètre contentPadding à DropdownMenuItem, pour permettre la personnalisation de la marge intérieure par défaut. content devient une extension sur RowScope.
    • Changement de nom : ModalDrawerLayout devient ModalDrawer.
    • Changement de nom : BottomDrawerLayout devient BottomDrawer.
    • (I1cc66)

Version 1.0.0-alpha12

10 février 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-alpha12. Liste des commits de la version 1.0.0-alpha12.

Modifications apportées à l'API

  • Abandon de la prise en charge de ViewGroups par UiApplier. Suppression des composables emitView obsolètes. (Ifb214)
  • Changement de nom : CompositionReference devient CompositionContext. (I53fcb)
  • Déplacement de ComponentActivity.setContent vers androidx.activity.compose.setContent dans le module androidx.activity:activity-compose. (Icf416)
  • Mise à jour de l'API Snapshot, pour plus de cohérence avec les consignes concernant les API et pour masquer les classes d'implémentation internes dans l'API publique. (Id9e32)
  • Renommage des Ambients pour correspondre à la nouvelle convention Ambient > CompositionLocal. Le précédent nom des Ambients était AmbientFoo, tandis que CompositionLocals est devenu LocalFoo. (I2d55d)
  • Ambient a été renommé CompositionLocal, et ambientOf/staticAmbientOf ont été remplacés respectivement par compositionLocalOf/staticCompositionLocalOf. Cette modification permet de clarifier l'objectif de CompositionLocal : un mécanisme permettant de fournir/récupérer des valeurs locales pour une composition. Les instances CompositionLocal doivent être précédées du préfixe Local, tel que val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6)
  • takeMutableSnapshot et takeSnapshot ont été déplacés pour devenir des méthodes associées d'un instantané. (I91f19)
  • Abandon de @ComposableContract, désormais remplacé par trois annotations plus spécifiques.

    @ComposableContract(restartable = false) devient @NonRestartableComposable. @ComposableContract(readonly = true) devient @ReadOnlyComposable. @ComposableContract(preventCapture = true) devient @DisallowComposableCalls. @ComposableContract(tracked = true) a été supprimé. (I60a9d)

  • Les utilitaires emptyContent() et (@Composable () -> Unit).orEmpty() ont été abandonnés, car ils n'ont plus d'impact positif sur les performances ni de valeur particulière. (I0484d).

  • Reclassement de snapshotFlow et withMutableSnapshot, qui ne sont plus en phase expérimentale. (I6a45f)

  • Mise à jour des recomposeurs, qui peuvent désormais être fermés. Les recomposeurs fermés poursuivent la recomposition jusqu'à ce que les coroutines enfants de la composition soient terminées. Changement de nom : Recomposer.shutDown devient "cancel" pour marquer la distinction avec "close". (Ib6d76)

  • L'artefact compose:runtime-dispatch est désormais obsolète. MonotonicFrameClock se trouve désormais dans compose:runtime, et AndroidUiDispatcher dans compose:ui. (Ib5c36)

  • Refactorisation de l'API ciblée par le plug-in de compilation Compose, afin d'utiliser une interface plutôt qu'une classe concrète. Cette interface n'utilise plus de paramètre de type.

    Il s'agit d'une modification interne qui ne devrait pas affecter la compatibilité du code source, mais qui constitue une modification destructive de la compatibilité binaire. (I3b922, b/169406779)

  • Ajout de SnapshotMutableState. (Icfd03).

  • DisposableEffectDisposable a été renommé DisposaleEffectResult. (Ica7c6).

  • Suppression de Recomposer.current(). [Abstract]ComposeView utilise désormais par défaut des recomposeurs créés par nécessité, délimités dans la fenêtre et gérés par le ViewTreeLifecycleOwner pour la fenêtre concernée. La recomposition et les animations basées sur withFrameNanos sont suspendues tant que le cycle de vie de l'hôte est arrêté. (I38e11)

  • Mise à jour de Recomposer.runningRecomposers, qui propose désormais un StateFlow global des RecomposerInfo en lecture seule, permettant d'observer l'état de la composition en cours dans le processus. Privilégiez cette API plutôt que Recomposer.current(), devenue obsolète. (If8ebe)

  • DisposableEffectDisposable a été renommé DisposaleEffectResult. (I3ea68)

Version 1.0.0-alpha11

28 janvier 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-alpha11. Liste des commits de la version 1.0.0-alpha11

Modifications apportées à l'API

  • Abandon des propriétés onCommit, onDispose et onActive, remplacées par les API SideEffect et DisposableEffect. (If760e)
  • Abandon de l'API emit() et de toutes ses surcharges, renommées ComposeNode. Les API sont identiques, mais portent un nom différent afin de respecter les conventions de Compose. (I4137b)
  • Abandon de invalidate et compositionReference(), respectivement remplacés par currentRecomposeScope et par rememberCompositionReference. (I583a8)
  • Abandon de CompositionLifecycleObserver, remplacé par RememberObserver.

    Remplacement de CompositionLifecycleObserver par RememberObserver, avec une sémantique modifiée et des méthodes renommées. Le passage à la nouvelle API peut être effectué mécaniquement pour les objets qui ne sont mémorisés qu'une seule fois, ce qui constitue et reste la pratique recommandée. Toutefois, si une référence a été mémorisée plusieurs fois dans une composition, onRemembered est appelé pour chaque référence, tandis que onEnter n'est appelé qu'une seule fois. onEnter était appelé plusieurs fois si l'objet était utilisé dans des sous-compositions, telles que WithConstraints et Scaffold, ce qui rendait un appel unique de onEnter non fiable, justifiant sa suppression de RememberObserver.

    RememberObserver ajoute onAbandoned, qui est appelé si l'instance RememberObserver est renvoyée par le rappel transmis à remember, mais n'a pas été mémorisé dans l'état de la composition, faisant que onRemembered n'est jamais appelé. Ce cas peut se produire si une exception met fin à la composition avant qu'elle soit terminée, ou si la composition est supprimée, car l'état pour lequel la composition était produite n'est plus d'actualité, ou si la composition n'est plus nécessaire pour toute autre raison. Si l'instance de RememberObserver qui suit la recommandation de référence unique ci-dessus suit une ressource externe, onForgotten et onAbandoned indiquent chacun que la ressource n'est plus nécessaire. Si l'objet suit le travail démarré ou les ressources allouées dans onRemembered, onAbandoned peut être ignoré, car il ne sera pas appelé si onRemembered est appelé. (I02c36)

  • Ne plus marquer les fonctions collectAsState() comme intégrées. (Ia73e4)

Correction de bugs

  • Mise à jour de WithConstraints, retravaillé, remplacé par BoxWithConstraints et déplacé vers foundation.layout. (I9420b, b/173387208)
  • Mise à profit de TestCoroutineDispatcher dans les tests. (I532b6)

Version 1.0.0-alpha10

13 janvier 2021

Publication d'androidx.compose.runtime:runtime-*:1.0.0-alpha10. Liste des commits de la version 1.0.0-alpha10

Modification destructive

  • La restructuration de l'API de compilation interne permet de regrouper les modifications apportées aux nœuds générés par la composition dans la phase "Appliquer les modifications" de la composition, une fois terminée l'exécution de toutes les fonctions @Composable.

    Cette modification de comportement est potentiellement destructive pour le code de l'application, car les nœuds ne sont plus disponibles depuis les API internes et expérimentales tant que les modifications n'ont pas été appliquées. Pour contourner ce problème, vous pouvez généralement entourer le code de dépendances dans un composable SideEffect et différer son exécution jusqu'à ce que les nœuds aient été créés et initialisés. (I018da)

Modifications apportées à l'API

  • Ajout d'un moyen de suivre si le recomposeur a appliqué des modifications. (I1b3e2)
  • Développement des API [Abstract]ComposeView pour permettre le recyclage des vues basées sur Compose, en supprimant leur composition pour la recréer ultérieurement. Ajout d'API pour installer et découvrir les recomposeurs délimités dans la fenêtre, et de CompositionReferences pour créer des compositions enfants.

    Ajout de ViewCompositionStrategy pour configurer la stratégie de suppression des compositions de [Abstract]ComposeViews. Le comportement par défaut consiste à supprimer lorsque la fenêtre est détachée. (I860ab)

Correction de bugs

  • Mise à jour du recomposeur, qui expose désormais un flux de son état actuel, permettant de surveiller son activité et celle des effets associés. (Ifb2b9)
  • Mise à jour du keyEvent natif, désormais accessible via keyEvent.nativeKeyEvent. (I87c57, b/173086397)

Version 1.0.0-alpha09

16 décembre 2020

Publication d'androidx.compose.runtime:runtime-*:1.0.0-alpha09. Liste des commits de la version 1.0.0-alpha09

Modifications apportées à l'API

  • Suppression de SlotTable, SlotReader et SlotWriter de l'API publique. Précédemment marqués comme InternalComposeAPI, ces éléments sont désormais internes pour le module Compose.

    Ajout de CompositionData et CompositionGroup comme substituts que l'API ui-tooling peut utiliser afin d'extraire des informations de composition. Ces éléments sont publics, mais ne sont pas destinés à être utilisés en dehors de l'API ui-tooling, car ils fournissent des informations brutes que cette API interprète. (I31a9c)

  • La classe Applier n'est plus considérée comme (Id85b0)

  • Mise à jour de l'interface Applier pour simplifier la construction d'arborescences de bas en haut plutôt que de haut en bas.

    Changement de nom : la méthode insert() devient insertTopDown().

    Ajout d'une méthode insertBottomUp().

    Un applicateur insère des nœuds dans l'arborescence modifiée à l'aide de insertTopDown() ou de insertBottomUp(), selon leur performance.

    Il est beaucoup plus efficace de construire certaines arborescences, telles que LayoutNode et View, de bas en haut plutôt que de haut en bas. Avant ce changement, l'implémentation ascendante exigeait une pile d'insertions, qui devait être copiée sur chaque applicateur nécessitant une construction ascendante pour améliorer les performances. Avec cette modification, Applier écrase insertBottomUp() pour créer une arborescence de bas en haut ou insertTopDown() pour construire l'arborescence de haut en bas. (Icbdc2)

  • Compose prend en charge les getters de propriété qui peuvent effectuer des appels composables. Cette fonctionnalité ne sera pas supprimée, mais la syntaxe permettant de déclarer un getter de propriété comme étant @Composable change.

    Pour ce faire, la syntaxe désormais obsolète consistait à annoter la propriété elle-même :

        @Composable val someProperty: Int get() = ...
    

    Désormais, vous devez utiliser la syntaxe correcte ci-dessous en annotant le getter de la propriété :

       val someProperty: Int @Composable get() = ...
    

    Les deux syntaxes fonctionneront pendant un certain temps, mais à terme, l'ancienne syntaxe deviendra une erreur de compilation. (Id9197)

Correction de bugs

  • Reclassement de AndroidOwner, désormais interne. (Ibcad0, b/170296980)
  • Reclassement de subcomposeInto(LayoutNode), désormais interne. (Id724a)

Version 1.0.0-alpha08

2 décembre 2020

Publication d'androidx.compose.runtime:runtime-*:1.0.0-alpha08. Liste des commits de la version 1.0.0-alpha08.

Modifications apportées à l'API

  • Ajout d'une vérification lint pour l'attribution d'un nom et d'une position au paramètre lambda composable, afin de confirmer la cohérence avec les consignes Compose. Nous avons également migré certaines API utilisant children comme nom de lambda de fin vers content, conformément à la vérification lint et aux consignes. (Iec48e)
  • Mise à jour de Recomposer, qui n'accepte plus EmbeddingContext. Les dépendances de planification requises sont obtenues à partir de effectCoroutineContext. Abandon de FrameManager. Les intégrations de plate-forme doivent initialiser leur propre gestion globale des captures instantanées. (I02369)
  • La fonction RestorableStateHolder.withRestorableState a été renommée RestorableStateProvider. (I66640)

Correction de bugs

  • Abandon des éléments utilisant le suffixe Ambient dans leur nom, remplacés par de nouvelles propriétés utilisant le préfixe Ambient, conformément aux conventions des autres éléments de ce type et des consignes relatives à l'API Compose. (I33440)
  • Suppression de l'ancien module ui-test et ses bouchons. (I3a7cb)

Version 1.0.0-alpha07

11 novembre 2020

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

Nouvelles fonctionnalités

Modifications apportées à l'API

  • L'annotation @UnionType est désormais obsolète. (I57cde)
  • Ajout de provideDefault comme alternative pour fournir des Ambients. Cette option peut être utilisée pour spécifier des valeurs d'Ambient qui ne seront définies que si aucune valeur n'est a été fournie précédemment. (Id6635, b/171024925)
  • Changement de nom : LaunchedTask devient LaunchedEffect, pour plus de cohérence avec les API SideEffect et DisposableEffect. Afin d'encourager les bonnes pratiques, LaunchedEffect n'est pas autorisé sans paramètre d'objet. (Ifd3d4)
  • Applier dispose désormais de rappels onBeginChanges/onEndChanges qui sont appelés lorsqu'un Composer commence/a terminé d'appliquer les modifications à l'arborescence. Ils peuvent être utilisés pour la gestion par lot des ressources si nécessaire. (Icf476)
  • Mise à jour du recomposeur, qui nécessite désormais un CoroutineContext pour la construction. (Ic4610)
  • Modification de l'implémentation interne de SlotTable. Ces changements ne devraient pas affecter l'API publique. (If9828)
  • Les adaptateurs rxjava2 obsolètes, qui ne prennent pas la valeur initiale, ont été supprimés. (Idb72f)

Correction de bugs

  • Abandon de foundation.Text, remplacé par material.Text. Pour obtenir une API de texte basique non catégorique, qui ne consomme aucune valeur de thème, reportez-vous à androidx.compose.foundation.BasicText. (If64cb)
  • Abandon de BaseTextField. Utilisez plutôt BasicTextField. (I896eb)
  • Déplacement de plusieurs symboles liés à la mise en page depuis androidx.compose.ui vers androidx.compose.layout.ui. (I0fa98, b/170475424)

Contribution externe

  • Ajout du module runtime-rxjava3 pour la composition. Semblable à runtime-rxjava2. (I02cbf)

Version 1.0.0-alpha06

28 octobre 2020

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

Modifications apportées à l'API

  • Reclassement de Recomposer, désormais une CompositionReference et un parent de composition valide. Le nombre d'emplacements exigeant un Recomposer explicite a été réduit. (I4036f)
  • Ajout de l'API DisposableEffect, équivalente à SideEffect, qui joue le rôle d'onCommit-with-params, mais avec un onDispose obligatoire.
    • Ajout de l'API rememberUpdatedState pour publier des données de la recomposition sur des processus en cours ou de longue durée, tels que DisposableEffects ou LaunchedTasks.
    • (Id50b9)
  • MutableVector implémente désormais RandomAccess. (I85d73, b/170461551)
  • Ajout du composable SideEffect pour appliquer des effets secondaires de composition à des objets gérés par la composition. SideEffect est destiné à remplacer le composable onCommit. (Ia77c2)
  • Ajout de l'API expérimentale RestorableStateHolder. Elle permet d'enregistrer l'état défini avec [savedInstanceState] et [rememberSavedInstanceState] pour la sous-arborescence avant de le supprimer, ce qui permet de le recomposer la prochaine fois avec l'état restauré. (I66884, b/166586419)

Correction de bugs

  • Prise en charge des transitions dans ComposeTestRule. L'option permettant d'activer le curseur clignotant dans ComposeTestRule a été supprimée. (If0de3)

Version 1.0.0-alpha05

14 octobre 2020

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

Modifications apportées à l'API

  • Ajout d'un modificateur de suspension d'entrée Modifier.pointerInput expérimental. (Ia77d2)
  • Amélioration des performances de défilement de LazyColumn/Row grâce à une réduction de la charge de sous-composition pour chaque défilement. Ajout d'une nouvelle méthode hasInvalidations() à la classe Composition. La méthode hasPendingChanges() de Recomposer a été renommée hasInvalidations(). (Ib2f32, b/168293643, b/167972292, b/165028371)
  • Ajout de l'API produceState pour lancer des coroutines à partir d'une composition qui mettent à jour une valeur State<T> unique au fil du temps. (Id4a57)
  • launchInComposition renommé LaunchedTask pour correspondre aux consignes de l'API Compose. (I99a8e)
  • Mise à jour des mises à en page personnalisées : l'ordre des appels place() y définit désormais l'ordre de dessin des éléments enfants. (Ibc9f6)

Version 1.0.0-alpha04

1er octobre 2020

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

Modifications apportées à l'API

  • Ajout de OwnerScope pour permettre la collecte des champs d'application d'observation de la mise en page et du dessin lorsqu'ils ne sont plus valides. (Ic4cf8)
  • Ajout de l'API derivedStateOf pour créer des objets State basés sur un calcul pouvant lire (et extraire) d'autres objets State. (If758b)
  • Ajout de l'API TestOnly pour SnapshotStateObserver. (I6e2a9)

Correction de bugs

  • Abandon de foundation.Box. Utilisez foundation.layout.Box à la place. (Ie5950, b/167680279)

Version 1.0.0-alpha03

16 septembre 2020

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

Modifications apportées à l'API

  • CompositionCoroutineScope n'implémente plus MonotonicFrameClock. Les appelants de withFrameNanos doivent importer explicitement la fonction d'ordre supérieur. (Icb642, b/166778123)

Correction de bugs

  • Les fonctions de test globales, telles que onNode ou waitForIdle, sont désormais obsolètes. Veuillez migrer vers leurs nouveaux équivalents définis sur ComposeTestRule. (I7f45a)
  • launchInComposition ne lance plus les coroutines sans répartition. (Ief6af, b/166486000)

Version 1.0.0-alpha02

2 septembre 2020

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

Modifications apportées à l'API

  • Ajout des API snapshotFlow et withMutableSnapshot pour consommer et générer des modifications de données d'instantané. (I3e722)
  • Mise à jour de la convention d'appel des fonctions modulables. Ce changement constitue une modification destructive de la compatibilité binaire. Toutes les bibliothèques doivent être recompilées pour fonctionner avec cette version du plug-in de compilation de Compose.

    Ce changement ne constitue pas une modification destructive de la compatibilité au niveau source, car les seules API qui ont été modifiées sont des API de compilation avec activation explicite. (I7afd2, b/158123185)

  • Méthodes de planification supprimées de EmbeddingContext. (I7b9be)

  • onPreCommit est obsolète, et onCommit adopte désormais son comportement.

    onCommit et onActive s'exécutent désormais dans le même frame de chorégraphe que celui dans lequel la composition est modifiée, plutôt qu'au début du nouveau frame de chorégraphe. (I70403)

Version 1.0.0-alpha01

26 août 2020

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

Version 0.1.0-dev

Version 0.1.0-dev17

19 août 2020

Publication d'androidx.compose.runtime:runtime-*:0.1.0-dev17. Liste des commits de la version 0.1.0-dev17

Modifications apportées à l'API

  • Les émissions personnalisées peuvent désormais déclarer qu'un ou plusieurs setters peuvent être ignorés et recomposés indépendamment de l'émission. (Ibbd13)
  • Suppression des appels FrameManager, devenus obsolètes.

    Mise à jour des API Compose internes pour réduire la charge nécessaire pour suivre des objets d'état tels que mutableStateof(). (I80ba6)

  • Abandon du composable state { ... }, à remplacer par des appels explicites à remember { mutableStateOf(...) } pour plus de clarté. Cette approche réduit la surface globale de l'API et le nombre de concepts liés à la gestion des états, et correspond au modèle by mutableStateOf() de délégation des propriétés de classe. (Ia5727)

  • Flow.collectAsState détermine désormais le coordinateur par défaut à partir de la composition, au lieu d'utiliser Dispatchers.Main par défaut. (I9c1d9)

  • Correction d'un plantage qui survenait lorsqu'un élément qui enregistre l'état était utilisé dans la boucle "for". Il est désormais possible d'utiliser la même clé dans savedInstanceState(). L'API de UiSavedStateRegistry a été ajustée pour répondre à cette nouvelle exigence. (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)

Correction de bugs

  • Abandon d'emitView. Si possible, utilisez plutôt AndroidView pour émettre des vues dans Compose. Notez que la composition directe de Views et ViewGroups ne sera pas prise en charge, sauf s'il s'agit de nœuds externes (leaf) dans l'arborescence de composition, lorsque cela est possible en utilisant AndroidView. (I29b1e, b/163871221)

Version 0.1.0-dev16

5 août 2020

Publication d'androidx.compose.runtime:runtime-*:0.1.0-dev16. Liste des commits de la version 0.1.0-dev16

Modifications apportées à l'API

  • La règle de mutation par défaut de mutableStateOf(), ambientOf() et savedInstanceStateOf() est désormais structuralEqualityPolicy() au lieu de referentialEqualityPolicy().

    La valeur par défaut permettant de décider si une nouvelle valeur attribuée à une instance mutableStateOf() est considérée comme une modification est désormais définie par défaut sur == au lieu de ===.

    Voir https://kotlinlang.org/docs/reference/equality.html.

    ambientOf() et savedInstanceStateOf() utilisent mutableStateOf() dans leurs implémentations. Ils ont donc été modifiés pour être cohérents avec mutableStateOf().

    L'utilisation de l'égalité structurelle correspond plus précisément aux attentes des développeurs.

    Par exemple :

    val state = mutableStateOf(1f)
    

    Suivi de :

    state.value = 1f
    

    Ceci ne sera plus considéré comme une modification pour state. Vous n'aurez plus besoin de recomposer l'utilisation de state lors de la composition.

    Il s'agit d'une modification destructive, mais dans la plupart des cas (par exemple, lors de l'utilisation de classes qui ne forcent pas equals()), cela n'aura aucun effet notable sur une application.

    Les classes qui forcent equals(), telles que les classes data, peuvent constater une dégradation des performances, car leurs méthodes equals() sont désormais appelées par défaut lorsqu'elles sont attribuées à mutableStateOf().

    Le comportement précédent peut être restauré en ajoutant le paramètre de stratégie policy = referentialEqualityPolicy() aux appels à mutableStateOf(), ambientOf() et savedInstanceStateOf(). (Ic21a7)

  • Conversion de Row et Column en fonctions inline, ce qui réduit considérablement la charge associée à leur utilisation. (I75c10)

Correction de bugs

  • Abandon de setViewContent, à remplacer par setContent. (I7e497, b/160335130)
  • Ajout de MonotonicFrameAnimationClock, qui permet d'utiliser un MonotonicFrameClock en tant que AnimationClockObservable pour combler l'écart entre les nouvelles horloges basées sur des coroutines et les API qui utilisent toujours les anciennes horloges basées sur des rappels.

    Mise à jour : ManualFrameClock est le nouvel équivalent de ManualAnimationClock. Il remplace MonotonicFrameClock. (I111c7, b/161247083)

  • Modifier.stateDraggable a été entièrement retravaillé et renommé en Modifier.swipeable. Une nouvelle classe SwipeableState a été ajoutée, et DrawerState et BottomDrawerState ont été refactorisés pour en hériter. [Modal/Bottom]DrawerLayout ne reçoit plus de paramètre onStateChange. (I72332, b/148023068)

  • Abandon de Modifier.plus. Utilisez Modifier.then à la place. La forme "then" offre un signal d'ordination plus fort et interdit les saisies de type Modifier.padding().background() + anotherModifier, qui rompent la chaîne et sont plus difficile à lire. (Iedd58, b/161529964)

  • Ajout de SubcomposeLayout. Il s'agit d'une primitive de bas niveau, qui permet de composer les enfants pendant la mesure. Cette option est utile si vous souhaitez, pour la composition de la sous-arborescence, utiliser pendant la mesure certaines des valeurs qui ne sont disponibles qu'après. Par exemple, WithConstraints n'est pas implémenté par SubcomposeLayout. (I25cc8)

  • Changements de nom : le composant Material FilledTextField devient TextField et le composant Foundation TextField devient BaseTextField afin de faciliter la découverte et l'utilisation de l'API souhaitée. (Ia6242, b/155482676)

  • Changement de nom : Modifier.drawBackground devient Modifier.background. (I13677)

Version 0.1.0-dev15

22 juillet 2020

Publication d'androidx.compose.runtime:runtime-*:0.1.0-dev15. Liste des commits de la version 0.1.0-dev15

Mise à jour des dépendances

  • Pour utiliser la version 0.1.0-dev15 de Compose, vous devez mettre à jour vos dépendances en fonction des nouveaux extraits de code présentés dans la section Déclarer des dépendances ci-dessus.

Modifications apportées à l'API

  • L'annotation @Model est désormais obsolète. Utilisez un état et mutableStateOf comme alternatives. Cette décision a été prise après une longue discussion.

    Justification

    Les raisons clés comprennent notamment les points suivants :

    • Réduction de la surface d'API et du nombre de concepts à enseigner
    • Alignement avec d'autres kits d'outils comparables (SwiftUI, React, Flutter)
    • Décision réversible. Nous pourrons toujours rétablir @Model ultérieurement.
    • Suppression des utilisations à la marge et des questions difficiles à répondre sur la configuration de @Model
    • Classes de données @Model, égalités, code de hachage, etc.
    • Comment est-il possible que j'aie certaines propriétés "observées" et d'autres non ?
    • Comment spécifier l'égalité structurelle ou référentielle à utiliser dans l'observation ?
    • Réduit la "magie" du système, ce qui réduit la probabilité que quelqu'un suppose que le système est plus intelligent qu'il ne l'est réellement (autrement dit, qu'il sait comment différencier une liste)
    • Précision de l'observation plus intuitive
    • Meilleure refactorisation variable -> propriété sur une classe
    • Meilleures possibilités d'optimisation manuelle
    • Alignement sur le reste de l'écosystème et moins d'ambiguïté par rapport au choix d'un état immuable ou non

    Notes de migration

    Presque toutes les utilisations existantes de @Model se transforment de manière relativement simple en deux cas de figure. L'exemple ci-dessous comporte une classe @Model avec deux propriétés uniquement à titre d'exemple, et elle est utilisée dans un composable.

    @Model class Position(
     var x: Int,
     var y: Int
    )
    
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    Option 1 : utiliser State<OriginalClass> et créer des copies.

    Cette approche est simplifiée avec les classes de données Kotlin. Vous devez en réalité transformer toutes les propriétés var précédentes en propriétés val d'une classe de données, puis utiliser state au lieu de remember, et attribuer la valeur d'état aux copies clonées de l'original à l'aide de la méthode pratique copy(...) de classe de données.

    Notez que cette approche ne fonctionne que lorsque les seules mutations de cette classe ont été effectuées au même niveau d'accès que celui où l'instance State a été créée. Si la classe effectue une mutation interne en dehors du niveau d'accès de l'utilisation, et que vous vous basez sur cette observation, l'approche suivante est à privilégier.

    data class Position(
     val x: Int,
     val y: Int
    )
    
    @Composable fun Example() {
     var p by state { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p = p.copy(x=it) }
       onYChange={ p = p.copy(y=it) }
     )
    }
    

    Option 2 : utiliser mutableStateOf et les délégués de propriété.

    Cette approche est simplifiée par les délégués de propriété Kotlin et par l'API mutableStateOf, qui vous permet de créer des instances MutableState en dehors de la composition. En bref, remplacez toutes les propriétés var de la classe d'origine par des propriétés var avec mutableStateOf comme délégué. L'avantage est que l'utilisation de la classe ne change pas du tout, car seule l'implémentation interne est modifiée. Cependant, le comportement n'est pas complètement identique à l'exemple d'origine, car chaque propriété est désormais observée individuellement, et l'abonnement se fait également de façon individuelle. Par conséquent, les recompositions que vous voyez après cette refactorisation peuvent être moins larges (ce qui est une bonne chose).

    class Position(x: Int, y: Int) {
     var x by mutableStateOf(x)
     var y by mutableStateOf(y)
    }
    
    // source of Example is identical to original
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    (I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)

  • Mise à jour de la stratégie de génération de code du compilateur de Compose. Avant la modification, le compilateur Compose transformait les appels en fonctions modulables. Suite à la modification, la compilation transforme le corps d'une fonction modulable, mais laisse le site d'appel essentiellement inchangé.

    Cela signifie que la majeure partie de la logique qui communique avec l'environnement d'exécution de Compose est appliquée au début du corps de la fonction, et non au site d'appel.

    Ce changement devrait préserver la compatibilité avec la source pour toutes les utilisations de Compose. La plupart des utilisateurs de Compose ne devraient pas avoir à modifier leur code suite à ce changement.

    La signature JVM de toutes les fonctions modulables a été modifiée pour mettre en œuvre ce changement. Les fonctions modulables qui acceptent un seul paramètre sont transformées en fonctions acceptant trois paramètres. Les paramètres supplémentaires sont le Composer, un entier "clé" et un entier de masque de bits servant à propager les métadonnées via des appels.

    Désormais, Compose transforme également les arguments par défaut en fonction modulable. Elle le fait sans introduire de surcharge synthétique supplémentaire par défaut de la fonction elle-même. Ce changement réduit donc le nombre de fonctions définies.

    Ce changement introduit des modifications intentionnelles des comportements :

    1. Certains appels qui ne l'étaient pas auparavant seront désormais ignorés.
    2. Les expressions modulables dans les expressions d'argument par défaut sont désormais correctement suivies et gérées.

    Cette mise à jour introduit également des optimisations : 1. Le résultat des comparaisons de paramètres est propagé dans le graphique d'appel vers d'autres fonctions modulables. Cela permet de réduire le nombre de comparaisons lors de l'exécution, de réduire la taille de la table d'emplacements et d'ignorer davantage des fonctions modulables qui n'étaient auparavant pas ignorées. 2. Les paramètres déterminés comme statiques au moment de la compilation ne sont plus comparés ni stockés dans l'environnement d'exécution. Cela permet de réduire le nombre de comparaisons et la taille des tables d'emplacements. 3. La structure de contrôle du corps des fonctions permet de réduire le nombre de groupes générés. Cela réduit la taille de la table d'emplacements et réduit la charge de travail de l'environnement d'exécution. 4. Les paramètres de distribution et de destinataire qui ne sont pas utilisés dans le corps de la fonction ne sont plus pris en compte pour déterminer si une fonction peut être ignorée.

    La plupart des modifications destructives concernent les API que le compilateur cible directement. L'utilisation typique de Compose n'est pas affectée : 1. Composer::startExpr a été supprimé ; 2. Composer::endExpr a été supprimé ; 3. Composer::call a été abandonné ; 4. Les surcharges sans varargs de key ont été supprimées. À l'avenir, utilisez la version vararg. 5. L'annotation Pivotal a été abandonnée. Utilisez key à la place. 6. ScopeUpdateScope::updateScope a été modifié afin d'attendre un Function3 au lieu d'un Function1. 7. restartableFunction et restartableFunctionN ont été mis à jour pour inclure des paramètres de temps de compilation supplémentaires (I60756, b/143464846)

  • Ajout de sortWith et removeRange à MutableVector. (Icccf7)

  • Ajout des implémentations de méthode par défaut pour CompositionLifecycleObserver. (I24289)

  • Applier requiert désormais une méthode clear() pour supprimer les compositions. (Ibe697)

  • Ajout de asMutableList() à MutableVector pour le transmettre à l'API publique sans avoir à copier toute la liste. (I298df)

  • Ajout de rememberCoroutineScope() pour obtenir un CoroutineScope géré dans la composition pour lancer des tâches en réponse à des événements. (I0e264)

  • MutableVector est une nouvelle collection qui n'implémente aucune interface de collection standard. Elle est plus rapide que nécessaire et n'est destinée qu'à des implémentations internes. (I8ebd6)

  • Suppression temporaire de StableMutableList et de StableMutableMap pour éviter un problème dans la version de Kotlin requise pour Compose. Ces interfaces seront ajoutées à nouveau une fois que Compose aura été mis à jour vers une version de Kotlin qui ne présente pas ce problème.

    SnapshotStateList et SnapshotStateMap sont désormais publics, mais ils seront abandonnés une fois StableMutableList et StableMutableMap restaurés. (Ia7769)

  • Ajout d'une fonction de premier niveau withFrameNanos pour le minutage des animations. (Ie34c5)

  • Abandon de l'annotation @Untracked, remplacée par @ComposableContract(tracked=false). (Id211e)

  • RestartableFunction et les API associées ont été renommées en ComposableLambda, etc. Ces API n'étaient ciblées que par le compilateur, cela ne devrait donc pas affecter la compatibilité au niveau de la source. Le changement de nom a été principalement effectué pour indiquer qu'il est préférable que cette classe apparaisse dans les traces de la pile. (I7eb25).

  • L'annotation @Composable n'est plus valide sur les classes. (Ia5f02)

  • Ambient<T> est maintenant @Stable au lieu de @Immutable. (I0b4bb)

  • Avant cette modification, le plug-in de compilation de Compose interceptait de manière non triviale les appels de constructeurs dans une fonction @Composable lorsqu'une méthode "emit operator" était détectée dans le composeur résolu. Cette stratégie de résolution de l'appel prêtait à confusion et déviait des règles de résolution standard de Kotlin. Il s'agissait d'un concept vestigial ne faisant plus partie du modèle de réflexion qui structure Compose. (I5205a, b/158123804)

  • Reclassement du composable Recompose, qui n'est plus une abstraction utile. La plupart des recompositions devraient faire suite aux attributions MutableState. Pour les autres cas, nous vous recommandons d'utiliser la fonction invalidate pour déclencher une recomposition du champ d'application actuel. (Ifc992)

  • "Observe" n'est plus une abstraction utile. Si vous avez besoin de la répliquer, vous pouvez simplement créer une fonction modulable qui exécute un paramètre lambda composable. Exemple : @Composable fun Observe(body: @Composable () -> Unit) = body(). (I40d37)

  • @Direct a été abandonné au profit de @ComposableContract(restartable=false). (If4708)

  • Ajout d'un adaptateur pour le StateFlow récemment ajouté, qui permet de préremplir la valeur initiale afin que l'état renvoyé ne puisse pas être vide. (I61dd8, b/156233789)

  • Ajout d'un adaptateur pour Flow. Exemple d'utilisation : valeur val par flow.collectAsState(). (If2198, b/153375923)

  • Déplacement des opérateurs de délégation de propriété [Mutable]State vers des extensions pour prendre en charge les optimisations de délégation de propriété Kotlin 1.4. Les appelants doivent ajouter des importations pour continuer à utiliser by state { ... } ou by mutableStateOf(...). (I5312c)

  • Déplacement de androidx.compose.ViewComposer vers androidx.ui.node.UiComposer. androidx.compose.Emittable a été supprimé, car il faisait doublon avec ComponentNode. androidx.compose.ViewAdapters a été supprimé et n'est plus accepté. Compose.composeInto a été abandonné. Utilisez setContent ou setViewContent à la place. Compose.disposeComposition a été abandonné. Utilisez la méthode dispose sur le Composition renvoyé par setContent à la place. androidx.compose.Compose.subcomposeInto a été déplacé vers androidx.ui.core.subcomposeInto. ComponentNode#emitInsertAt a été renommé ComponentNode#insertAt. ComponentNode#emitRemoveAt a été renommé ComponentNode#removeAt. ComponentNode#emitMode a été renommé ComponentNode#move. (Idef00)

  • Mise à jour de l'indicateur ComposeFlags.COMPOSER_PARAM, désormais sur true, ce qui modifie la stratégie de génération du code pour le plug-in Compose. De manière générale, des fonctions @Composable sont générées avec un paramètre synthétique supplémentaire, qui est transmis aux appels @Composable suivants afin que l'environnement d'exécution en gère correctement l'exécution. Il s'agit d'une modification destructive de la compatibilité binaire, qui ne devrait pas affecter la compatibilité du code source dans les utilisations sanctionnées de Compose. (I7971c)

  • Modifications destructives apportées à l'API Ambients. Pour en savoir plus, consultez le journal et la documentation sur Ambient<T>. (I4c7ee, b/143769776)

  • Ajout de ui-livedata, un nouvel artefact avec adaptateur pour LiveData. Exemple d'utilisation : valeur val par liveData.observeAsState(). (Ie9e8c, b/150465596)

  • Les adaptateurs Rx sans valeur initiale explicite ont été abandonnés. L'utilisation de la valeur "null" n'est pas toujours optimale par défaut. Par exemple, si vous avez une liste, il est préférable de commencer avec emptyList() ou toute autre valeur par défaut raisonnable. (I00025, b/161348384)

  • Ajout de ui-rxjava2, un nouvel artefact avec adaptateurs pour RxJava2. Exemple d'utilisation : valeur val par observable.subscribeAsState(). (Ifab4b, b/153369097)

  • savedInstanceState() peut désormais être utilisé avec des types pouvant avoir une valeur nulle. (I6847f, b/153532190)

  • Nouveautés : listSaver() et mapSaver() pour simplifier l'écriture d'objets Saver personnalisés. (I8cf68, b/152331508)

  • Nouvelles fonctions : savedInstanceState() et rememberSavedInstanceState(). Elles sont semblables à state() et remember(), mais ont une fonctionnalité intégrée permettant d'enregistrer l'état de l'instance. (If1987, b/152025209)

Correction de bugs

  • Changement de nom : runOnIdleCompose devient runOnIdle. (I83607)
  • Conversion de LayoutNode en API expérimentale. (I4f2e9)
  • Abandon de androidx.ui.foundation.TextFieldValue et androidx.ui.input.EditorValue, ainsi que des composables TextField, FilledTextField et CoreTextField, qui utilisaient le même type. Utilisez androidx.ui.input.TextFieldValue à la place. (I4066d, b/155211005)
  • Suppression de l'API DrawBackground, devenue obsolète, remplacée par les API d'extension drawBackground sur Modifier. Nous avons refactorisé les implémentations Color, Brush et Paint de drawBackground afin de réduire les chemins de code et d'éviter de créer des modificateurs dans la composition. (I0343a)
  • Mise à jour des API Compose de niveau supérieur, afin d'exposer CanvasScope au lieu de Canvas. Cela évite aux consommateurs d'avoir à gérer leurs propres objets Paint. Les consommateurs qui ont toujours besoin d'accéder à Canvas peuvent utiliser la méthode d'extension drawCanvas, qui fournit un rappel permettant d'émettre des commandes de dessin avec le Canvas sous-jacent. (I80afd)
  • Modification de l'API de lambda de fin de WithConstraints. Au lieu de deux paramètres, elle possède un champ d'application receveur qui, outre les contraintes et layoutDirection, fournit les propriétés minWidth, maxWidth, minHeight et maxHeight dans Dp. (I91b9a, b/149979702)
  • Ajout d'un modificateur de marge intérieure symétrique. (I39840)
  • Mise à jour de wrapContentWidth et wrapContentHeight, qui attendent désormais un alignement vertical ou horizontal au lieu d'un alignement quelconque. Le modificateur de gravité a été mis à jour pour accepter l'alignement vertical ou horizontal. Row, Column et Stack ont été mis à jour pour accepter les alignements continus personnalisés. (Ib0728)
  • Changement de nom : le module ui-text devient ui-text-core. (I57dec)
  • Améliorations apportées à l'API DrawModifier :
    • Mise à jour de ContentDrawScope, qui sert de champ d'application receveur pour draw().
    • Suppression de tous les paramètres de draw().
    • Mise à jour de DrawScope, qui utilise désormais la même interface que l'ancienne forme CanvasScope.
    • Ajout de la méthode drawContent() à ContentDrawScope. (Ibaced, b/152919067)
  • Abandon de ColoredRect. Utilisez Box(Modifier.preferredSize(width, height).drawBackground(color)) à la place. (I499fa, b/152753731)
  • Remplacement de l'opérateur plus du modificateur par des fonctions d'extension de fabrique. (I225e4)
  • Mise à jour des membres RowScope et ColumnScope, désormais accessibles en dehors de Row et Column. (I3a641)
  • Changement de nom : LayoutFlexible devient LayoutWeight. Changement de nom : le paramètre tight devient fill. (If4738)
  • Mise à jour de WithConstraints, qui accepte désormais le paramètre LayoutDirection. (I6d6f7)
  • Changement de nom et mise à jour : background devient DrawBackground et est mémorisé par défaut. (Ia0bd3)
  • Remplacement de ButtonStyle par des fonctions distinctes et suppression de la surcharge de texte (chaîne). Consultez les exemples mis à jour pour plus d'informations sur la mise en œuvre. (If63ab, b/146478620, b/146482131)
  • Conversion des méthodes runOnIdleCompose et runOnUiThread de ComposeTestRule en fonctions globales. (Icbe8f)

Contribution externe

  • Suppression des API inutiles telles que Looper et Handler de la couche de portage de l'environnement d'exécution Compose. (I6847d)
  • Abandon de Flow<T>.collectAsState() lorsqu'aucune valeur initiale n'est indiquée. Utilisez StateFlow<T> à la place ou transmettez une valeur initiale explicite. (I63f98, b/157674865)