Optimiser l'utilisation de la mémoire pour votre cadran

Pour fournir la meilleure autonomie possible des appareils Wear OS, le système effectue un calcul de l'utilisation de la mémoire. Conformément aux [consignes relatives à la qualité des applications Wear OS][1], les cadrans qui utilisent le format de cadran limitent la quantité de mémoire qu'ils peuvent consommer, en fonction de l'état actuel de la montre:

  • En [mode Veille][2], le cadran ne peut pas consommer plus de 10 Mo de mémoire.
  • En mode interactif, le cadran ne peut pas consommer plus de 100 Mo de mémoire.

Le système calcule l'utilisation de mémoire d'un cadran

Pour calculer la taille occupée par une police d'image ou de bitmap dans un cadran utilisant le format de cadran, le système effectue les étapes suivantes:

  1. Décompresse l'image ou la police bitmap.
  2. Il examine la police de l'image ou du bitmap pour déterminer si elle peut être optimisée de l'une des manières suivantes :
    • Redimensionnée pour mieux correspondre à la taille d'affichage.
    • Recadrée de façon à supprimer les pixels totalement transparents.
    • sous-échantillonné au format [RGB565][3]{: .external}, si cela est possible sans perte de fidélité.

En fonction du cadre de délimitation obtenu, le système calcule la taille de la police de l'image ou du bitmap, en octets, selon l'une des méthodes suivantes:

  • Pour les images et les polices qui utilisent le format [RGBA8888][4]{: .external}: \( 4 \times width \times height \)
  • Pour les images et les polices RVB565: \( 2 \times width \times height \)
  • Pour les images et les polices qui utilisent la configuration bitmap ALPHA_8 : \( width \times height \)

Mode interactif

Lors du calcul de l'utilisation de la mémoire pour le mode interactif, le système calcule la somme des éléments suivants:

  1. Taille non traitée des [polices vectorielles][5].
  2. Utilisation estimée de la police par défaut du système.
  3. Taille totale des images et des polices bitmap après recadrage, redimensionnement ou reformatage.

Configurations

Pour les cadrans contenant des [configurations][6], le système tente de calculer la taille totale des ressources utilisées dans les différentes configurations. Parfois, lorsqu'il existe un très grand nombre de combinaisons, le système surestimait légèrement le nombre de ressources utilisées simultanément dans les différentes configurations.

Mode ambiant et calques

Pour le mode Veille, le système suppose que la montre est affichée à l'aide de trois calques plein écran au maximum, dont deux sont entièrement statiques:

  1. Tout ce qui se trouve sous les éléments de la montre. La majeure partie du "boîtier" du cadran est composée en grande partie de cette couche. Le nombre d'images utilisées pour dessiner ce calque n'a pas d'importance. Le système le comptabilise comme une image plein écran.
  2. Aiguilles de montre, écrans numériques ou complications avec des liaisons de plate-forme affichées de manière dynamique.
  3. Tous les éléments listés après les aiguilles et les complications dans le fichier XML source.

En règle générale, l'utilisation de la mémoire en mode Veille provient principalement de polices bitmap, en particulier de grandes.

Méthodes pour réduire l'utilisation de la mémoire

En suivant les suggestions de cette section, vous aurez plus de chances de créer un cadran dont la consommation de mémoire ne dépasse pas ces limites.

Recadrer et redimensionner les polices bitmap

Recadrez vos images et vos objets [BitmapFont][7], puis redimensionnez-les pour les adapter à leur taille d'affichage.

Lorsque Wear OS dessine un cadran, toutes les images sont décompressées. Une image en plein écran principalement vierge peut consommer 3 Ko sur le disque, mais si elle est affichée sur un écran de 450 x 450 pixels, le système la décompresse, augmentant ainsi sa taille à 750 Ko ou plus en mémoire.

Utiliser des hauteurs de police bitmap cohérentes

Lorsque vous utilisez un élément BitmapFont, toutes les images d'un personnage doivent avoir la même hauteur. De même, toutes les images contenant des mots doivent avoir la même hauteur.

Utiliser des tailles de cadre cohérentes dans les animations

Au lieu de déplacer une image sur un cadran, mettez à jour les éléments qu'il contient et maintenez son cadre de délimitation au même emplacement par rapport au cadran. Par exemple, si vous souhaitez animer un cercle sur votre cadran, envisagez de modifier la couleur d'un cercle au lieu de le faire rouler sur le cadran.

Cette technique réduit la taille du cadre de délimitation calculé par le système pour l'animation.

Dédupliquer les images

Si le cadran affiche plusieurs copies de la même image, chargez une seule copie de cette image dans la mémoire et faites plusieurs références à cette image.

Afficher la progression à l'aide d'arcs

Pour émuler une barre de progression qui se termine au bout d'une minute ou après une heure, n'utilisez pas 60 images distinctes. Créez plutôt un objet [Arc][8] contenant une expression contrôlant sa longueur, comme indiqué dans l'extrait de code suivant:

<PartDraw angle="0" width="400" height="400" name="ProgressBar"
          pivotX="0.5" pivotY="0.5 x="40" y="40">
    <Arc centerX="200" centerY="200" width="400" height="400"
         startAngle="0" endAngle="360">
        <!-- Completes a "progress loop" every minute. -->
        <Transform target="endAngle"
                   value="0 + (clamp([SECOND], 0, 60) - 0) * 6" />
        <Stroke cap="ROUND" color="#123456" thickness="10" />
    </Arc>
</PartDraw>

Pour afficher une ligne non continue, par exemple pour obtenir un style de montre numérique rétro, utilisez une propriété tiret pour un objet [Stroke][9] ou une superposition d'image de masque semi-transparent.

Placer les aiguilles et les complications à la fin du fichier source

Les nœuds XML sont dessinés dans l'ordre dans lequel ils sont listés dans le fichier XML source. En plaçant les aiguilles et les complications à la fin du fichier, le système élimine une couche entière du calcul de la mémoire en mode Veille.

Évaluer l'utilisation de la mémoire de votre cadran

Pour mesurer l'utilisation de la mémoire de votre cadran, utilisez l'outil d'évaluation de l'espace mémoire utilisé, disponible dans le dépôt [watchface][10] sur GitHub.

  • Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé.
  • Arc
  • Line
  • Rectangle