Speichernutzung für das Zifferblatt optimieren

Damit die Akkulaufzeit von Wear OS-Geräten optimal genutzt werden kann, wird die Arbeitsspeichernutzung berechnet. Gemäß den Qualitätsrichtlinien für Wear OS-Apps gibt es für Zifferblätter mit diesem Format je nach aktuellem Status der Smartwatch Limits für den Speicherplatz, den sie verbrauchen können:

  • Im Inaktivmodus kann das Zifferblatt nicht mehr als 10 MB Arbeitsspeicher belegen.
  • Im interaktiven Modus kann das Zifferblatt nicht mehr als 100 MB Arbeitsspeicher belegen.

System berechnet die Arbeitsspeichernutzung eines Zifferblatts

Um die Größe zu berechnen, die von einem Bild oder einer Bitmapschrift auf einem Zifferblatt mit dem Zifferblattformat belegt wird, führt das System die folgenden Schritte aus:

  1. Dekomprimiert die Bild- oder Bitmapschrift.
  2. Das Bild oder die Bitmapschrift untersucht, ob sie mit einer der folgenden Methoden optimiert werden kann:
    • Die Größe wurde an die Displaygröße angepasst.
    • Zugeschnitten, um vollständig transparente Pixel zu entfernen.
    • Herabgetastet auf RGB565, wenn dies ohne Verlust der Grafikqualität möglich ist.

Basierend auf dem resultierenden Begrenzungsrahmen berechnet das System die Größe des Bilds oder der Bitmapschrift in Byte wie folgt:

  • Für Bilder und Schriftarten mit RGBA8888: \( 4 \times width \times height \)
  • Für Bilder und Schriftarten mit RGB565: \( 2 \times width \times height \)
  • Für Bilder und Schriftarten in der Bitmapkonfiguration ALPHA_8:\( width \times height \)

Interaktiver Modus

Bei der Berechnung der Arbeitsspeichernutzung für den interaktiven Modus berechnet das System die Summe der folgenden Elemente:

  1. Die unverarbeitete Größe von Vektorschriftarten.
  2. Die geschätzte Nutzung der Standardschriftart des Systems.
  3. Die Gesamtgröße der Bilder und Bitmapschriften nach dem Zuschneiden, Ändern der Größe oder Neuformatierung.

Konfigurationen

Bei Zifferblättern, die Konfigurationen enthalten, versucht das System, die Gesamtgröße der in den verschiedenen Konfigurationen verwendeten Ressourcen zu berechnen. Gelegentlich kann es vorkommen, dass bei einer sehr großen Anzahl von Kombinationen das System etwas überschätzt, wie viele Ressourcen in den verschiedenen Konfigurationen gleichzeitig verwendet werden.

Ambient-Modus und Ebenen

Für den Inaktivmodus geht das System davon aus, dass die Uhr mit bis zu drei Vollbildebenen gerendert wird, von denen zwei völlig statisch sind:

  1. Alles unter den Smartwatch-Elementen. Der größte Teil des Zifferblatts ist in dieser Ebene angeordnet. Es spielt keine Rolle, wie viele Bilder zum Zeichnen dieser Ebene verwendet werden. Das System zählt sie als ein Vollbildbild.
  2. Alle Uhrenzeiger, digitalen Displays oder Zusatzfunktionen mit Plattformbindungen, die dynamisch gerendert werden.
  3. Alle Elemente, die in der XML-Quelldatei nach den Uhrzeigern und Zusatzfunktionen aufgeführt sind.

In der Regel stammt der Großteil der Arbeitsspeichernutzung im Inaktivmodus von Bitmap-Schriftarten, insbesondere von großen.

Methoden zum Reduzieren der Arbeitsspeichernutzung

Wenn Sie die Vorschläge in diesem Abschnitt befolgen, ist die Wahrscheinlichkeit höher, dass Sie ein Zifferblatt erstellen, dessen Arbeitsspeicherverbrauch innerhalb dieser Limits bleibt.

Bitmapschriftarten zuschneiden und ihre Größe anpassen

Schneiden Sie Ihre Bilder und BitmapFont-Objekte zu und passen Sie sie an die Anzeigegröße an.

Wenn Wear OS ein Zifferblatt zeichnet, werden alle Bilder dekomprimiert. Ein größtenteils leeres Bild im Vollbildmodus belegt möglicherweise 3 KB auf der Festplatte. Wird es jedoch auf einem Bildschirm mit einer Größe von 450 × 450 Pixeln angezeigt, dekomprimiert das System das Bild, sodass der Arbeitsspeicher auf mindestens 750 KB vergrößert wird.

Konsistente Bitmap-Schriftgrößen verwenden

Wenn Sie BitmapFont verwenden, sollten alle Bilder für ein Zeichen alle dieselbe Höhe haben. Ebenso sollten alle Bilder für Wörter dieselbe Höhe haben.

Konsistente Frame-Größen in Animationen verwenden

Anstatt ein Bild über ein Zifferblatt zu verschieben, aktualisieren Sie die Elemente im Bild und belassen Sie den Begrenzungsrahmen an derselben Position bezogen auf das Zifferblatt. Wenn Sie beispielsweise einen Kreis auf Ihrem Zifferblatt animieren möchten, sollten Sie die Farbe eines Kreises ändern, anstatt ihn über das Zifferblatt zu drehen.

Mit dieser Technik wird die Größe des Begrenzungsrahmens reduziert, der vom System für die Animation berechnet wird.

Bilder deduplizieren

Wenn auf Ihrem Zifferblatt mehrere Kopien desselben Bildes angezeigt werden, laden Sie nur eine Kopie des Bildes in den Arbeitsspeicher und verweisen Sie mehrere auf dieses Bild.

Fortschritt mit Bögen anzeigen

Wenn Sie eine Fortschrittsanzeige emulieren möchten, die nach 1 Minute oder nach 1 Stunde abgeschlossen ist, sollten Sie keine 60 einzelnen Bilder verwenden. Erstellen Sie stattdessen ein Arc-Objekt, das einen Ausdruck enthält, der seine Länge steuert, wie im folgenden Code-Snippet gezeigt:

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

Wenn eine nicht durchgehende Linie eingeblendet werden soll, zum Beispiel für einen Retro-Look einer digitalen Uhr, verwende entweder eine Bindestrich-Eigenschaft für ein Stroke-Objekt oder ein halbtransparentes Maskenbild-Overlay.

Smartwatch-Zeiger und Zusatzfunktionen am Ende der Quelldatei platzieren

XML-Knoten werden in der Reihenfolge gezeichnet, in der sie in der Quell-XML-Datei aufgeführt sind. Indem das System die Zeiger und die Zusatzfunktionen am Ende der Datei platziert, eliminiert das System eine ganze Schicht von der Berechnung des Arbeitsspeichers im Inaktivmodus.

Arbeitsspeichernutzung des Zifferblatts prüfen

Mit dem Tool zur Bewertung des Arbeitsspeicherbedarfs, das im Repository watchface auf GitHub verfügbar ist, können Sie die Arbeitsspeichernutzung Ihres Zifferblatts messen.