Environnement d'exécution Compose
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Voir la documentation de référence de l'API pour tous les packages Compose)
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
4 septembre 2024 | 1.7.0 | - | - | 1.8.0-alpha01 |
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.
Groupe | Description |
---|---|
compose.animation | Créer des animations dans les applications Jetpack Compose afin d'enrichir l'expérience utilisateur. |
compose.compiler | Transformation de fonctions @Composable et prise en charge des optimisations avec un plug-in de compilation en Kotlin. |
compose.foundation | Conception 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.material | Cré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.material3 | Cré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.runtime | 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. |
compose.ui | Composants 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.7.0" implementation "androidx.compose.runtime:runtime-livedata:1.7.0" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.0" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.0") implementation("androidx.compose.runtime:runtime-livedata:1.7.0") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.0") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } 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.
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 compatibles (par exemple, compose-runtime et tracing-perfetto) : correction d'un problème qui entraînait l'intégration d'une version plus récente de Compose-runtime 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
devientandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8). - Rendre les API du SDK Perfetto de traçage cohérentes avec
android.os.Trace
. (I73ba0, b/282199917). - Conditions préalables au 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.8
Version 1.8.0-alpha01
4 septembre 2024
Publication d'androidx.compose.runtime:runtime-*:1.8.0-alpha01
. La version 1.8.0-alpha01 contient ces commits.
Version 1.7
Version 1.7.0
4 septembre 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0
. La version 1.7.0 contient ces commits.
Changements importants depuis la version 1.6.0
- Ajout de la possibilité de fournir une composition locale calculée en fonction des valeurs d'autres locales de composition, soit par défaut, à l'aide de
compositionLocalWithComputedDefault()
, soit en fournissant un lambda à utiliser pour calculer la valeur en utilisantprovidesComputed
au lieu deprovides
. - 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. Il est utilisé à la place decurrent
, qui n'est accessible que dans les fonctions@Composable
. (Iadbc0). - 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 visibles que lorsque l'instantané dans lequel l'objet a été créé a été appliqué.
- L'état initial de
mutableStateOf()
, ainsi que ses versions primitives, est la valeur transmise en tant que paramètre àmutableStateOf()
. L'état initial demutableStateListOf()
etmutableStateMapOf()
est vide. - Ajout de
Snapshot.isInSnapshot
etSnapshot.PreexistingSnapshotId
, qui permettent à un objet d'état d'être immédiatement accessible à partir de l'instantané global dès sa création. - Il est possible d'accéder immédiatement aux objets d'état personnalisés en suivant le modèle des modifications apportées aux objets d'instantané intégrés. (I84a17).
- Activez
nonSkippingGroupOptimization
pour les bibliothèques Compose. Le code généré pour toutes les fonctions composables non redémarrables dans androidx sera ainsi plus efficace. Nous prévoyons de l'activer par défaut à l'avenir. I(acbc08) - Invalider les lambdas composables dans des sous-compositions sur le même frame (98301c).
- Appelez le rappel
onRelease
dans le même ordre queonForgotten
. (2cd790). - Activation du mode "Ignorer" de façon forte. (ed1766)
- Rendre
currentCompoundHashKey
unique dans davantage de cas. (d4a872)
Version 1.7.0-rc01
21 août 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-rc01
. La version 1.7.0-rc01 contient ces commits.
Version 1.7.0-beta07
7 août 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-beta07
. La version 1.7.0-beta07 contient ces commits.
Version 1.7.0-beta06
24 juillet 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-beta06
. La version 1.7.0-beta06 contient ces commits.
Version 1.7.0-beta05
10 juillet 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-beta05
. La version 1.7.0-beta05 contient ces commits.
Version 1.7.0-beta04
26 juin 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-beta04
. La version 1.7.0-beta04 contient ces commits.
Version 1.7.0-beta03
12 juin 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-beta03
. La version 1.7.0-beta03 contient ces commits.
Version 1.7.0-beta02
29 mai 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-beta02
. La version 1.7.0-beta02 contient ces commits.
Version 1.7.0-beta01
14 mai 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-beta01
. La version 1.7.0-beta01 contient ces commits.
Version 1.7.0-alpha08
1er mai 2024
Publication d'androidx.compose.runtime:runtime-*:1.7.0-alpha08
. La version 1.7.0-alpha08 contient ces commits.
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 locales de composition, soit par défaut, à l'aide de
compositionLocalWithComputedDefault()
, soit en fournissant un lambda à utiliser pour calculer la valeur en utilisantprovidesComputed
au lieu deprovides
. - 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. Il est utilisé à la place decurrent
, 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 visibles que lorsque l'instantané dans lequel l'objet a été créé a été appliqué.
- L'état initial de
mutableStateOf()
, ainsi que ses versions primitives, est la valeur transmise en tant que paramètre àmutableStateOf()
. L'état initial demutableStateListOf()
etmutableStateMapOf()
est vide. - Ajout de
Snapshot.isInSnapshot
etSnapshot.PreexistingSnapshotId
, qui permettent à un objet d'état d'être immédiatement accessible à partir de l'instantané global dès sa création. - Il est possible d'accéder immédiatement aux objets d'état personnalisés en suivant le modèle des modifications apportées aux objets d'instantané 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 unsnapshotFlow
. (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 permettant de gérer les valeurs uniques
providesDefault
. (538f45) - Éviter un interblocage dans le recomposeur qui accède à 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
- Suppression des modifications tardives sur 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 de l'état dérivé (ee7daf) - Lecture de
currentRecord
une fois par observation dans la composition. (b882b2) - Suppression de l'allocation d'itérateurs accidentels dans
snapshotFlow
. (231e56) - Activez
nonSkippingGroupOptimization
pour les bibliothèques Compose. Le code généré pour toutes les fonctions composables non redémarrables dans androidx sera ainsi plus efficace. Nous prévoyons de l'activer par défaut à l'avenir. 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 groupe de remplacement 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 de modifications. (53e7fd)
- Correction d'une fuite de mémoire dans 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
parScatterSet
(db572e) - Optimisation de
removeScope
dansScopeMap
(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 des sous-compositions sur le même frame (98301c).
- Appelez le rappel
onRelease
dans le même ordre queonForgotten
. (2cd790). - Filtrer les états modifiés qui ne sont pas observés dans
snapshotFlow
. (796b80).
Amélioration des performances
- Modifiez l'observateur d'instantané en place lorsqu'il est déjà transparent. (f60f30).
- Optimisez
SnapshotIdSet.lowest()
. (7ae149). - Utilisez un
fold()
sans allocation dansSnapshotIdSet
. (532b7d). - Suppression de l'allocation d'itérateurs. (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
Optimisation des performances
- Possibilité de créer des emplacements après l'ajout d'un groupe enfant. (b5960c)
- Optimisation des modifications de l'enregistrement des états des instantanés (28c3fe)
- Activation du mode "Ignorer" de façon forte. (ed1766)
Correction de bugs
- Compte du méta-paramètre par défaut dans la mémorisation intrinsèque (096665)
- Rendre
currentCompoundHashKey
unique dans davantage de cas. (d4a872) - Création de groupes lors de la fermeture d'un appel de fonction intégrée. (2a90fc)
Version 1.6
Version 1.6.8
12 juin 2024
Publication d'androidx.compose.runtime:runtime-*:1.6.8
. La version 1.6.8 contient ces commits.
Version 1.6.7
1er mai 2024
Publication d'androidx.compose.runtime:runtime-*:1.6.7
. La version 1.6.7 contient ces commits.
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 queonForgotten
. (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
- Renvoi des exceptions qui sont avalées lors de la boucle de recomposition. (4dff9a)
Optimisation des performances
- Optimisation des modifications de l'enregistrement des états des instantanés (28c3fe)
- Optimisation de
rememberSaveable
(f01d79) - Reporter la relecture des états dérivés jusqu'à ce que les modifications soient enregistrées (f38099)
- Amélioration de la fourniture de valeurs locales de composition. (a337ea)
Correction de bugs
- Correction de la fuite de mémoire de la table d'emplacements. (73fcfe)
- Ignorer la recomposition des sous-compositions qui seront supprimées. (Ieeb99, b/254645321).
- Ne déclenchez les cycles de vie d'une
RememberObserver
que lorsqu'elle est stockée dans un calcul mémorisé. (f6b4dc). - Limitez la capture
$dirty
aux lambdas intégrés. (acfca0). - Correction du contenu mobile recevant parfois des compositions locales incorrectes. (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 du contenu mobile recevant parfois des compositions locales incorrectes. (035cd6)
- Utilisez des tables de hachage sans attribution plus rapides dans
RecomposeScopeImpl
. (D79494) - Utilisez
ObjectIntMap
dansDerivedState
. (21862e). - Utilisez
IntRef
pour des entiersSnapshotThreadLocal
dansDerivedState
. (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 les cycles de vie d'une
RememberObserver
que lorsqu'elle est stockée dans un calcul mémorisé. (f6b4dc). - Amélioration des allocations dans le tri des listes d'invalidations. (954d63).
- Utilisez 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é commeRandomAccess
pour permettre l'utilisation de la version d'indexation directe des assistants de liste. (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
- Renvoi des exceptions qui sont 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 appelantsetContent
. (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 le mode de démontage des nœuds de contenu amovible. (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 de
rememberSaveable
(f01d79) - Reporter la relecture des états dérivés jusqu'à ce que les modifications soient enregistrées (f38099)
- Amélioration de la fourniture 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 leur réutilisation. (782071)
Modifications apportées à l'API
- Ajout d'une surcharge de cas spécial pour
CompositionLocalProviders
, qui évite une surcharge qui permet de fournir plusieurs valeurs plus rapidement, mais qui augmente le temps de saisie d'une seule valeur. (I6d640, b/288169379).
Correction de bugs
- Correction de la fuite de mémoire de la table d'emplacements. (73fcfe)
- Correction de la restauration de
rememberSaveable
lorsquestateSaver
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
- Ignorer la recomposition des sous-compositions qui seront supprimées. (Ieeb99, b/254645321).
- Réduction des allocations lors de l'application d'instantanés. (I65c09).
- Éviter de calculer
readableHash
dansDerivedState
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 les fonctions qui créent des états et doivent être encapsulées dans un appelremember
. (I64550). - Ajout de versions primitives d'état et de
MutableState
. (fb3d89) - Ajout de
Snapshot.isApplyObserverNotificationPending
. (I672a5) - Ajout de versions primitives de l'API
State
, qui permettent de suivre les valeurs Int, Long, Float et Double dans des objetsState
sans entraîner de pénalités pour l'autoboxing. Utilisez les nouvelles méthodes de fabriquemutableIntState(Int)
,mutableFloatStateOf(Float)
, etc. (I48e43).
Correction de bugs
- Ignorer la recomposition des sous-compositions qui seront supprimées. (Ieeb99, b/254645321).
- La référence à l'instantané n'est pas conservée dans
ComposerImpl
. (0206f7) - N'appliquez pas la composition deux fois. (f5791b)
- Assurez l'invalidation des valeurs d'état dérivées non initialisées. (aa2a92)
- Appelez
onEndChanges
lors de la suppression de la composition. (62cc8c). - Correction du déplacement de contenu dans une sous-composition. (4beb41)
- Correction des interblocages potentiels (c1a425 et 8edce0)
- Le recomposeur créé pour une fenêtre Android ne bloquera désormais que les appels à
withFrameNanos
au lieu de toute la composition lorsqu'il recevra 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 que les animations, ou tout autre appelant dewithFrameNanos
, 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 les nœuds 73fd4d8
- ON_STOP devrait suspendre les diffusions de l'horloge des frames au lieu de la composition ae276f1
- Invalider les champs d'application
SnapshotStateObserver
pour les états dérivés inchangés (84d9b1c) - Correction de l'interblocage potentiel lors de la suppression des compositions. 28761fc
- Correction du déplacement de 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) - Supprimez l'élément
fill
dansSlotTable.moveSlotGapTo()
et placez-le en fermeture. (81f9935) - Correction des invalidations manquantes lors du déplacement du contenu déplaçable. (1d7c024)
- Correction de l'invalidité immédiate du contenu déplaçable (8676618)
Amélioration des performances
- Évitez de calculer
readableHash
dansDerivedState
si l'instantané n'a pas été modifié. (307102). - Réduction des allocations (I65c09, d7ea77, 727974 et 445808)
- Annulation rapide de
CoroutineScopes
Compose (a55362 et bd382f) - Remplacement des enregistrements d'objets d'état par des enregistrements d'état inaccessibles. (c986960)
- Utilisation du composer du champ d'application approprié lors de la création de groupes. (9a5e5b6)
- Utilisation de
IdentityArraySet
pour stocker les invalidations d'instantanés (7f60cca) - Réduction des allocations pour les observations de l'instantané (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
Reporter la relecture des états dérivés jusqu'à ce que les modifications soient enregistrées (f38099)
Une inspection facultative est disponible pour recommander la migration des appels
mutableStateOf()
vers les types spécialisés correspondants pour les primitives. Son ID lint estAutoboxingStateCreation
. Auparavant, cette inspection était activée par défaut pour tous les projets. Pour afficher cet avertissement dans l'éditeur Android Studio et dans les résultats lint de votre projet, remplacez sa gravité par un avertissement (au moins "informatif") en déclarantwarning "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
- Ignorer 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
dansDerivedState
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 les fonctions qui créent des états et doivent être encapsulées dans un appelremember
. (I64550). - Ajout de versions primitives d'état et de
MutableState
. (fb3d89) - Ajout de
Snapshot.isApplyObserverNotificationPending
. (I672a5)
Correction de bugs
- Réduction des allocations (I65c09, d7ea77, 727974 et 445808)
- La référence à l'instantané n'est pas conservée dans
ComposerImpl
. (0206f7) - Annulation rapide de
CoroutineScopes
Compose (a55362 et bd382f) - N'appliquez pas la composition deux fois. (f5791b)
- Assurez l'invalidation des valeurs d'état dérivées non initialisées. (aa2a92)
- Appelez
onEndChanges
lors de la suppression de la composition. (62cc8c). - Correction du déplacement de contenu dans une sous-composition. (4beb41)
- Correction des interblocages potentiels. (c1a425
- ON_STOP devrait suspendre les diffusions de l'horloge des frames 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
, qui permettent de suivre les valeurs Int, Long, Float et Double dans des objetsState
sans entraîner de pénalités pour l'autoboxing. Utilisez les nouvelles méthodes de fabriquemutableIntState(Int)
,mutableFloatStateOf(Float)
, etc. (I48e43).
Correction de bugs
Appelez
onEndChanges
lors de la suppression de la composition. Les nœuds de focus supprimés pendantComposition.dispose
s'abonnent àonEndChanges
pour réinitialiser le focus.(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
, ce 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é à l'avance 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
nettoyait les anciennes dépendances, puis la lecture de la nouvelle valeur. Il en résulte une condition de concurrence avec invalidation se produisant à l'état "nettoyé", 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, ce qui garantit 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 bloquera désormais que les appels à
withFrameNanos
au lieu de toute la composition lorsqu'il recevra 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 que les animations, ou tout autre appelant dewithFrameNanos
, seront bloquées. (Id9e7f, b/240975572).
Correction de bugs
- Correction de l'interblocage potentiel dans la liste des instantanés et la carte. 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 les nœuds 73fd4d8
- ON_STOP devrait suspendre les diffusions de l'horloge des frames au lieu de la composition ae276f1
- Invalider les champs d'application
SnapshotStateObserver
pour les états dérivés inchangés (84d9b1c) - Correction de l'interblocage potentiel lors de la suppression des compositions. 28761fc
- Correction du déplacement de 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, amélioration des performances
- Remplacement des enregistrements d'objets d'état par des enregistrements d'état inaccessibles. (c986960)
- Utilisation du composer du champ d'application approprié 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és (7f60cca) - Supprimez
fill
dansSlotTable.moveSlotGapTo()
et placez-le en fermeture. (81f9935) - Correction des invalidations manquantes lors du déplacement du contenu pouvant être déplacé. (1d7c024)
- Correction de l'invalidité immédiate du contenu déplaçable (8676618)
- Réduction des allocations pour les observations de l'instantané (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
à lireCompositionLocals
en implémentant l'interfaceCompositionLocalConsumerModifierNode
. (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
Correction de l'interblocage potentiel dans la liste d'instantanés et la carte. 2eb6570
L'ajout de contenu à un
SnapshotStateList
ou à unSnapshotStateMap
peut rencontrer un interblocage si la modification est simultanée avec une écriture directe dans l'enregistrement d'état. Cette situation est particulièrement probable grâce aux modifications apportées par 93fcae828b, qui utilise les écritures directes pour libérer les enregistrements inutilisés.Les verrouillages sont désormais classés de sorte qu'aucune tentative de verrouillage d'instantané n'est effectuée 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
- Utilisation de la valeur initialisée 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 d'instantané 93fcae8
- Suppression des cases dans les recherches locales de composition 0875717
- Utilisation de la clé correcte pour les groupes de nœuds non réutilisables 6388d8d
- Protéger
SnapshotStateObserver
des applications récursives et simultanées s'applique 98cb6ba - Ajout d'une vérification des limites de contrôle de l'index dans la méthode "get" de
IdentityArraySet
Méthode 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 frame. 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 changé 9526fcc
- Tolérance du recomposeur pour les jobs annulés 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
etSnapshotStateMap
ont maintenant des implémentations explicites detoList()
ettoMap()
, 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 desnapshotFlow
sans avoir à copier les données. (Ica2bd).
Version 1.3
Version 1.3.3
11 janvier 2023
Publication de 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
- Ajout d'API pour permettre le traitement des exceptions pendant la composition, afin de faciliter la modification en temps réel
- Gestion des erreurs de composition pour le hot reload
- Gestion des erreurs de modification en temps réel lors de l'enregistrement/la restauration
Traçage de composition
- Ajout d'API de traçage d'exécution pour permettre l'utilisation de nouveaux outils de traçage des compositions
- Génération d'appels de début/fin pour les événements de trace du composable
- Ajout de ComposerKt.traceEventStart(Int, String)
API Composable Reflection
- Ajout d'une nouvelle API
ComposableMethod
pour permettre des appels plus fiables d'API composables basées sur la réflexion - Déplacement d'invokeComposable pour composer un environnement d'exécution
- Modification de l'API pour appeler la méthode composable
Correctifs d'exécution
- Correction du test de plage défectueux pour la vérification des repères par la table d'emplacements
- Autorisation de déplacement du contenu pouvant être déplacé vers et à l'extérieur de SubcomposeLayout
- Correction du déplacement du contenu vers le nouveau contenu d'une sous-composition
Système d'instantanés
- Plusieurs améliorations apportées au système d'instantanés concernant la gestion de la mémoire, les performances et l'exactitude
- Optimisation de la suppression du niveau d'accès dans SnapshotStateObserver
- Suppression des instantanés imbriqués créés à partir d'instantanés transparents
- Correction de la condition de concurrence lors de la lecture de l'état à partir de l'instantané global
- Compatibilité de DerivedState dans SnapshotStateObserver
- Interdiction de la suppression de l'état dérivé de la composition lorsqu'il est lu par d'autres niveaux d'accès
- Utilisation d'IdentityArrayMap au lieu de HashMap dans DerivedState
- Mise à jour des observateurs d'état dérivés afin d'utiliser un vecteur modifiable
- Mise à jour du nettoyage d'état de SnapshotStateObserver
- Remplacement de SnapshotStateObserver.invalidated par ArraySet
- Correction de la condition de concurrence lors de la lecture de l'état à partir de l'instantané global
- Correction de l'utilisation d'un enregistrement obsolète dans le calcul de hachage DerivedState
- Correction de la condition de concurrence lors de l'amélioration de l'instantané global
- Accélération du nettoyage des observations du niveau d'accès dans SnapshotStateObserver
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
etrememberCoroutineScope
ont été remplacés parcrossinline
. 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'APImovableContentOf
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
- Ajout d'un instantané expérimental unsafeEnter/Leave
- Ajout d'une API expérimentale Snapshot.asContextElement
- Ajout de Snapshot.withoutReadObservation
- Les états peuvent maintenant se déplacer dans une composition
- Traçage des recompositions dans Compose
Performances de la version 1.2
- Amélioration des performances locales de composition
- Les profils de référence pour Compose doivent être dérivés à l'aide de benchmarks
Corrections de bugs dans la version 1.2
- Suppression des informations de suivi des niveaux d'accès pour les recompositions dans cette version
- Interdiction de la suppression de l'état dérivé de la composition lorsqu'il est lu par d'autres niveaux d'accès
- Utilisation de la méthode removeScope() plus efficace dans SnapshotStateObserver
- Nettoyage des dépendances d'état dérivées dans la composition
- Correction de la modification de currentCompositeKeyHash après la recomposition interne dans du contenu mobile
- Nettoyage des compositions non valides pendant leur élimination
- Correction de la lecture de l'état dérivé lors de la recomposition
- Correction d'une fuite de mémoire lors de l'observation des objets d'état dérivés
- Clé de hachage composite movableContent corrigée pour gagner en cohérence
- Résolution d'un problème de plantage de l'outil de composition
- Vérification que l'invalidation forcée d'un groupe force la recomposition
- Correction du bug où rememberSaveable avec entrée est rétabli dans le mauvais ordre
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'interfaceCompositionTracer
. (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
etComposableOpenTarget
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
ouReusableComposeNode
doivent ajouter une annotationCompoableTarget
pour la fonction et un type de paramètre lambda de composable. Il est toutefois recommandé de créer une annotation marquée avecComposableTargetMarker
, puis d'utiliser l'annotation marquée plutôt que d'utiliser directementComposableTarget
. Une annotation composable marquée avecComposableTargetMarker
équivaut à unComposbleTarget
avec le nom complet de la classe d'attribut en tant que paramètre d'applicateur. Pour obtenir un exemple d'utilisation deComposableTargetMarker
, 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
dansandroidx.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é parRecomposer.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 Kotlin1.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 AGP7.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épertoiresrc/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èresH
,S
etP
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 classeandroidx.compose.runtime.SlotTable
aurait comme descripteurLandroidx/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éthodefun isPlaced(): Boolean
surLayoutNode
aurait pour signatureisPlaced()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ésormaisState<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 pourComposeNode
. (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ètrecount
. 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, appelerwithFrameNanos
ouRecomposer.runRecomposeAndApplyChanges
sansMonotonicFrameClock
génère une exceptionIllegalStateException
. (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
pourcompositionLocalOf
etstaticCompositionLocalOf
, 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èsselected
etonClick
. - Changement de nom : dans BottomNavigationItem,
alwaysShowLabels
devientalwaysShowLabel
. - Renommage des paramètres
bodyContent
, qui deviennent simplementcontent
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 quesecondary
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
devientonValueChangeFinished
, et peut désormais être nul. - Changement de nom : dans
Snackbar
, le paramètretext
devientcontent
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 surRowScope
. - Changement de nom :
ModalDrawerLayout
devientModalDrawer
. - Changement de nom :
BottomDrawerLayout
devientBottomDrawer
. - (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
etwithMutableSnapshot
, 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
parRememberObserver
, 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 queonEnter
n'est appelé qu'une seule fois.onEnter
était appelé plusieurs fois si l'objet était utilisé dans des sous-compositions, telles queWithConstraints
etScaffold
, ce qui rendait un appel unique deonEnter
non fiable, justifiant sa suppression deRememberObserver
.RememberObserver
ajouteonAbandoned
, qui est appelé si l'instanceRememberObserver
est renvoyée par le rappel transmis àremember
, mais n'a pas été mémorisé dans l'état de la composition, faisant queonRemembered
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 deRememberObserver
qui suit la recommandation de référence unique ci-dessus suit une ressource externe,onForgotten
etonAbandoned
indiquent chacun que la ressource n'est plus nécessaire. Si l'objet suit le travail démarré ou les ressources allouées dansonRemembered
,onAbandoned
peut être ignoré, car il ne sera pas appelé sionRemembered
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()
devientinsertTopDown()
.Ajout d'une méthode
insertBottomUp()
.Un applicateur insère des nœuds dans l'arborescence modifiée à l'aide de
insertTopDown()
ou deinsertBottomUp()
, selon leur performance.Il est beaucoup plus efficace de construire certaines arborescences, telles que
LayoutNode
etView
, 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
écraseinsertBottomUp()
pour créer une arborescence de bas en haut ouinsertTopDown()
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 verscontent
, 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 plusMonotonicFrameClock
. Les appelants dewithFrameNanos
doivent importer explicitement la fonction d'ordre supérieur. (Icb642, b/166778123)
Correction de bugs
- Les fonctions de test globales, telles que
onNode
ouwaitForIdle
, 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
etwithMutableSnapshot
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èleby 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ôtAndroidView
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()
etsavedInstanceStateOf()
est désormaisstructuralEqualityPolicy()
au lieu dereferentialEqualityPolicy()
.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()
etsavedInstanceStateOf()
utilisentmutableStateOf()
dans leurs implémentations. Ils ont donc été modifiés pour être cohérents avecmutableStateOf()
.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 destate
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 classesdata
, peuvent constater une dégradation des performances, car leurs méthodesequals()
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()
etsavedInstanceStateOf()
. (Ic21a7)Conversion de
Row
etColumn
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,
@Model
pourra être ramené 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ésval
d'une classe de données, puis utiliserstate
au lieu deremember
, et attribuer la valeur d'état aux copies clonées de l'original à l'aide de la méthode pratiquecopy(...)
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ésvar
de la classe d'origine par des propriétésvar
avecmutableStateOf
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 fonctions modulables, mais sans introduire de surcharge synthétique supplémentaire par défaut pour les fonctions elles-mêmes. Par conséquent, le nombre de fonctions définies sera réduit.
Ce changement introduit des modifications intentionnelles des comportements :
- Certains appels qui ne l'étaient pas auparavant seront désormais ignorés.
- 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 versionvararg
. 5. L'annotation Pivotal a été abandonnée. Utilisezkey
à 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 deStableMutableMap
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
etSnapshotStateMap
sont désormais publics, mais ils seront abandonnés une foisStableMutableList
etStableMutableMap
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 { ... }
ouby 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
ousetViewContent
à la place. Compose.disposeComposition a été abandonné. Utilisez la méthodedispose
sur leComposition
renvoyé parsetContent
à 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 surtrue
, 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
devientrunOnIdle
. (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
etrunOnUiThread
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. UtilisezStateFlow<T>
à la place ou transmettez une valeur initiale explicite. (I63f98, b/157674865)