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

Pour fournir la meilleure autonomie de batterie possible aux appareils Wear OS, le système calcule l'utilisation de la mémoire. Conformément aux consignes relatives à la qualité des applications Wear OS, 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, 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 la mémoire d'un cadran

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

  1. Décompresse l'image ou la police bitmap.
  2. Examen de l'image ou de la police bitmap pour voir si elle peut être optimisée de l'une des manières suivantes :
    • Redimensionnement pour mieux correspondre à la taille d'écran.
    • Recadré pour supprimer les pixels totalement transparents.
    • Sous-échantillonné à RGB565, si cela peut être fait sans perte de fidélité.

En fonction du cadre de délimitation obtenu, le système calcule la taille de l'image ou de la police bitmap, en octets, comme suit:

  • Pour les images et les polices utilisant RGBA8888: \( 4 \times width \times height \)
  • Pour les images et les polices utilisant le mode 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.
  2. Estimation de l'utilisation 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, le système tente de calculer la taille totale des ressources utilisées dans les différentes configurations. Parfois, lorsqu'il y a un très grand nombre de combinaisons, le système surest légèrement le nombre de ressources utilisées simultanément dans les différentes configurations.

Mode Veille et calques

En mode Veille, le système suppose que le rendu de la montre est effectué avec jusqu'à trois couches plein écran, dont deux entièrement statiques:

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

En général, l'utilisation de la mémoire en mode Veille provient de polices bitmap, en particulier les grandes.

Méthodes de réduction de l'utilisation de la mémoire

En suivant les suggestions de cette section, vous êtes plus susceptible de créer un cadran dont l'utilisation de mémoire ne dépasse pas ces limites.

Recadrer et redimensionner les polices bitmap

Recadrez vos images et vos objets BitmapFont, 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'elle contient et conservez son cadre de délimitation au même endroit 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 que le système calcule 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 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 soit une propriété tiret pour un objet Stroke, soit une superposition d'image de masque semi-transparent.

Placez les aiguilles de la montre 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 de la montre 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 sur GitHub.