La bibliothèque alpha Remote Compose permet de créer des widgets de jeu interactifs sur Android
Public- 20 Oct, 2026

Les développeurs Android peuvent désormais créer des widgets de jeu hautement interactifs grâce à la nouvelle bibliothèque alpha Remote Compose. Bien que Jetpack Glance reste la norme pour la plupart des implémentations de widgets en raison de sa rétrocompatibilité et de ses outils, il repose sur le système RemoteViews, qui est désormais obsolète. Ce système présente des limitations importantes, notamment l'impossibilité d'utiliser des expressions mathématiques pour les animations continues et un contrôle système strict de la taille et de la fréquence des mises à jour. Remote Compose comble ces lacunes en offrant un cadre flexible pour créer des animations et des interactions complexes, qui étaient auparavant impossibles ou nécessitaient des astuces non prises en charge dans l'écosystème RemoteViews.
L'architecture de Remote Compose sépare la définition de l'interface utilisateur de son exécution. Votre application exécute du code déclaratif annoté avec @RemoteComposable afin de sérialiser les mises en page et les expressions d'animation dans un format binaire compact appelé Remote Document. Ce document est envoyé au processus hôte, tel que le lanceur de l'écran d'accueil. Au sein de l'hôte, un lecteur Remote Compose gère localement toutes les interactions, les redimensionnements, les changements d'état et les animations. Cette conception est analogue à celle d'un navigateur web rendant un document HTML. Comme le lecteur gère les mises à jour de manière indépendante dans son propre processus, l'application principale n'a pas besoin de rester active. Ce mécanisme réduit considérablement les allers-retours de communication inter-processus (IPC), ce qui entraîne une latence plus faible et une consommation de batterie réduite par rapport aux widgets RemoteViews traditionnels, où l'application doit pousser les mises à jour de l'interface.
Pour intégrer cette technologie, les développeurs doivent ajouter des dépendances spécifiques à leur projet, notamment remote-core, remote-creation et remote-creation-compose du groupe androidx.compose.remote, actuellement à la version 1.0.0-alpha21. La classe du widget doit hériter de RemoteComposeWidget, qui étend AppWidgetProvider. Les développeurs définissent l'interface utilisateur à l'aide de composables distants tels que RemoteBox, RemoteColumn, RemoteRow et RemoteText. La méthode onUpdate compile la mise en page en un document distant sérialisé et l'envoie au lanceur via updateRemoteView. Bien que Remote Compose réutilise la charge utile RemoteViews comme mécanisme de transport, les développeurs n'interagissent pas directement avec cette couche de transport. Le système enregistre le widget via la configuration standard du récepteur dans AndroidManifest.xml, avec un filtre d'intention APPWIDGET_UPDATE.
La gestion de l'état dans Remote Compose offre deux approches distinctes : l'état local de l'hôte et la persistance côté application. L'état local de l'hôte réside dans le document distant sur l'appareil hôte, ce qui le rend adapté aux données de session éphémères, comme un score de jeu qui peut être réinitialisé lors de l'émission d'un nouveau document ou du redémarrage du lanceur. La persistance côté application est requise pour les états qui doivent survivre aux mises à jour des documents et aux redémarrages du lanceur, tels que l'inventaire de l'utilisateur ou la progression. Étant donné qu'Android ne notifie pas l'application lors d'un redémarrage du lanceur en arrière-plan et rejoue à la place le dernier document mis en cache, les données critiques doivent être stockées dans le stockage de l'application. Par exemple, un widget de compagnon virtuel peut partager la devise en pièces avec l'application boutique, tandis qu'un jeu de défilement latéral conserve son score entièrement dans le document distant.
La puissance principale de Remote Compose réside dans les graphes d'expressions avec des références dynamiques. Ces graphes sont des formules mathématiques représentées sous forme de nœuds connectés, où certains nœuds contiennent des variables appelées références dynamiques. Le lecteur hôte met à jour directement ces références, permettant à l'interface du widget de se mettre à jour à chaque image de l'appareil sans réveiller le processus de l'application. Les développeurs créent ces graphes indirectement via le code. Par exemple, un compteur de touches peut être implémenté à l'aide de MutableRemoteInt et des fonctions valueChange. Lorsqu'un utilisateur touche le widget, l'hôte met à jour la référence dynamique localement. Ce mécanisme garantit que même les animations complexes image par image s'exécutent efficacement sur l'appareil hôte, en maintenant le processus de l'application en suspension et en économisant les ressources système.