Ottimizza l'utilizzo della memoria per il quadrante

Per offrire la migliore durata possibile della batteria dei dispositivi Wear OS, il sistema esegue un calcolo dell'utilizzo della memoria. Nell'ambito delle norme sulla qualità delle app Wear OS, i quadranti che utilizzano il formato del quadrante impongono dei limiti sulla quantità di memoria che possono utilizzare, a seconda dello stato attuale dell'orologio:

  • In modalità Ambient, il quadrante non può consumare più di 10 MB di memoria.
  • In modalità interattiva, il quadrante non può consumare più di 100 MB di memoria.

Il sistema calcola la memoria utilizzata da un quadrante

Per calcolare le dimensioni occupate da un carattere immagine o bitmap all'interno di un quadrante che utilizza il formato del quadrante, il sistema completa i seguenti passaggi:

  1. Decomprime il carattere dell'immagine o del carattere bitmap.
  2. Esamina il carattere immagine o bitmap per verificare se può essere ottimizzato in uno dei seguenti modi:
    • Ridimensionato per adattarsi meglio alle dimensioni del display.
    • Ritagliata per rimuovere i pixel completamente trasparenti.
    • Sottocampionamento a RGB565, se possibile senza perdere la fedeltà.

In base al riquadro di delimitazione risultante, il sistema calcola le dimensioni in byte del carattere immagine o bitmap come uno dei seguenti:

  • Per le immagini e i caratteri che utilizzano RGBA8888: \( 4 \times width \times height \)
  • Per le immagini e i caratteri che utilizzano RGB565: \( 2 \times width \times height \)
  • Per le immagini e i caratteri che utilizzano la configurazione bitmap ALPHA_8: \( width \times height \)

Modalità interattiva

Quando calcola l'utilizzo della memoria per la modalità interattiva, il sistema calcola la somma di quanto segue:

  1. Le dimensioni non elaborate di tutti i caratteri vettoriali.
  2. L'utilizzo stimato del carattere predefinito del sistema.
  3. Le dimensioni totali delle immagini e dei caratteri bitmap dopo aver applicato eventuali ritaglio, ridimensionamento o riformattazione.

Configurations (Configurazioni)

Per i quadranti che contengono configurazioni, il sistema tenta di calcolare la dimensione totale delle risorse utilizzate nelle diverse configurazioni. A volte, in presenza di un numero molto elevato di combinazioni, il sistema sovrastima leggermente il numero di risorse utilizzate contemporaneamente nelle diverse configurazioni.

Modalità Ambient e livelli

Per la modalità Ambient, il sistema presuppone che il rendering dello smartwatch venga visualizzato utilizzando fino a tre livelli a schermo intero, due dei quali completamente statici:

  1. Tutto ciò che si trova sotto gli elementi dell'orologio. La maggior parte del "corpo" del quadrante è composta da questo strato. Indipendentemente dal numero di immagini utilizzate per disegnare questo livello, il sistema la conteggia come un'unica immagine a schermo intero.
  2. Lancette orologio, display digitale o complicazioni con associazioni di piattaforme visualizzate in modo dinamico.
  3. Tutti gli elementi elencati dopo le lancette dell'orologio e le complicazioni nel file XML di origine.

In genere, la maggior parte dell'utilizzo della memoria in modalità Ambient proviene dai caratteri bitmap, in particolare da quelli di grandi dimensioni.

Metodi per ridurre l'utilizzo della memoria

Seguendo i suggerimenti in questa sezione, hai maggiori probabilità di creare un quadrante il cui consumo di memoria rimane entro questi limiti.

Ritagliare e ridimensionare i caratteri bitmap

Ritaglia le immagini e gli oggetti BitmapFont e ridimensionali in base alle dimensioni di visualizzazione.

Quando Wear OS disegna un quadrante, tutte le immagini sono decompresse. Un'immagine a schermo intero per lo più vuota potrebbe consumare 3 kB su disco, ma se viene visualizzata su uno schermo di 450 x 450 pixel, il sistema decomprime l'immagine, aumentando le dimensioni dell'immagine in memoria a 750 kB o più.

Utilizzare altezze dei caratteri bitmap coerenti

Quando utilizzi un elemento BitmapFont, tutte le immagini di un carattere devono avere ciascuna la stessa altezza. Analogamente, tutte le immagini relative alle parole devono avere ciascuna la stessa altezza.

Utilizzare dimensioni dei fotogrammi coerenti nelle animazioni

Anziché spostare un'immagine su un quadrante, aggiorna gli elementi all'interno dell'immagine e mantieni il riquadro di delimitazione nella stessa posizione rispetto al quadrante. Ad esempio, se vuoi animare un cerchio sul quadrante, valuta la possibilità di modificare il colore di un cerchio anziché far rotolare il cerchio sul quadrante.

Questa tecnica riduce le dimensioni del riquadro di delimitazione calcolato dal sistema per l'animazione.

Deduplica immagini

Se il quadrante mostra più copie della stessa immagine, carica solo una copia dell'immagine in memoria e fai diversi riferimenti a quell'immagine.

Mostra l'avanzamento utilizzando gli archi

Per emulare una barra di avanzamento che viene completata dopo 1 minuto o dopo 1 ora, non utilizzare 60 immagini separate. Crea invece un oggetto Arc contenente un'espressione che ne controlla la lunghezza, come mostrato nel seguente snippet di codice:

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

Per visualizzare una linea non continua, ad esempio per ottenere un look in stile orologio digitale retrò, utilizza una proprietà trattino per un oggetto Stroke o un overlay immagine maschera semitrasparente.

Posiziona le lancette e le complicazioni dello smartwatch alla fine del file sorgente

I nodi XML vengono tracciati nell'ordine in cui sono elencati nel file XML di origine. Mettendo le lancette dell'orologio e le complicazioni alla fine del file, il sistema elimina un intero livello dal calcolo della memoria in modalità Ambient.

Valutare l'utilizzo della memoria del quadrante

Per misurare l'utilizzo della memoria per il tuo quadrante, usa lo strumento di valutazione dell'impronta della memoria, disponibile nel repository watchface su GitHub.