Optymalizowanie wykorzystania pamięci przez tarczę zegarka

Aby zapewnić jak najdłuższy czas pracy na baterii urządzeń z Wear OS, system wykonuje obliczenia wykorzystania pamięci. Zgodnie ze wskazówkami dotyczącymi jakości aplikacji na Wear OS tarcze zegarka korzystające z Formatu tarczy zegarka mają limity dotyczące ilości pamięci, jaką mogą zużywać, w zależności od bieżącego stanu zegarka:

  • W trybie nieaktywnym tarcza zegarka nie może zużywać więcej niż 10 MB pamięci.
  • W trybie interaktywnym tarcza zegarka nie może zajmować więcej niż 100 MB pamięci.

System oblicza wykorzystanie pamięci przez tarczę zegarka

Aby obliczyć rozmiar zajmowany przez obraz lub czcionkę bitmapową na tarczy zegarka, która używa formatu tarczy zegarka, system wykonuje te czynności:

  1. Dekompresuje obraz lub czcionkę bitmapową.
  2. Sprawdza obraz lub czcionkę bitmapową, aby sprawdzić, czy można je zoptymalizować w jeden z tych sposobów:
    • Zmieniono rozmiar, aby lepiej dopasować go do rozmiaru wyświetlacza.
    • Przycięty, aby usunąć całkowicie przezroczyste piksele.
    • zmniejszenie próbkowania do RGB565, jeśli jest to możliwe bez utraty jakości.

Na podstawie otrzymanej ramki system oblicza rozmiar obrazu lub czcionki bitmapowej w bajtach, wykonując jedną z tych czynności:

  • W przypadku obrazów i czcionek, które używają RGBA8888: \( 4 \times width \times height \)
  • W przypadku obrazów i czcionek używających RGB565: \( 2 \times width \times height \)
  • W przypadku obrazów i czcionek, które używają konfiguracji bitmapy ALPHA_8:\( width \times height \)

Tryb interaktywny

Podczas obliczania wykorzystania pamięci w trybie interaktywnym system oblicza sumę tych wartości:

  1. Nieprzetworzony rozmiar czcionek wektorowych.
  2. Szacunkowe użycie domyślnej czcionki systemu.
  3. Całkowity rozmiar obrazów i czcionek bitmapy po przycięciu, zmianie rozmiaru lub zmianie formatu.

Konfiguracje

W przypadku tarcz zegarków zawierających konfiguracje system próbuje obliczyć łączny rozmiar zasobów używanych w różnych konfiguracjach. Czasami, gdy liczba kombinacji jest bardzo duża, system może nieznacznie zawyżać liczbę zasobów używanych jednocześnie w różnych konfiguracjach.

Dźwięki otoczenia i warstwy

W trybie dynamicznym system zakłada, że zegarek jest renderowany z użyciem maksymalnie 3 warstw pełnoekranowych, z których 2 są całkowicie statyczne:

  1. Wszystko poniżej elementów zegarka. W tej warstwie znajduje się większość „korpusu” tarczy zegarka. Nie ma znaczenia, ile obrazów wykorzystano do narysowania tej warstwy – system liczy to jako jeden obraz wyświetlany na pełnym ekranie.
  2. Wszelkie wskazówki, wyświetlacze cyfrowe i komplikacje z wiązaniami platformy, które są renderowane dynamicznie.
  3. Wszystkie elementy wymienione po wskazówkach i komplikacjach zegarka w pliku XML źródłowym.

Zazwyczaj większość pamięci w trybie dynamicznym zajmują czcionki bitmapowe, zwłaszcza duże.

Sposoby zmniejszania wykorzystania pamięci

Stosując się do sugestii podanych w tych sekcjach, zwiększysz szanse na utworzenie tarczy zegarka, która nie przekroczy tych limitów.

Przycinanie i zmienianie rozmiaru czcionek bitmapowych

Przytnij obrazy i obiekty BitmapFont oraz zmień ich rozmiar, aby dopasować je do rozmiaru wyświetlacza.

Gdy Wear OS wyświetla tarczę zegarka, wszystkie obrazy są dekompresowane. Obraz na pełnym ekranie, który jest w większości pusty, może zajmować na dysku 3 KB, ale jeśli jest wyświetlany na ekranie o wymiarach 450 × 450 pikseli, system dekompresuje obraz, zwiększając jego rozmiar w pamięci do 750 KB lub więcej.

Używaj spójnych wysokości czcionek bitmapowych

Jeśli używasz BitmapFont, wszystkie obrazy danej postaci powinny mieć tę samą wysokość. Podobnie wszystkie obrazy słów powinny mieć taką samą wysokość.

Używaj stałych rozmiarów klatek w animacjach.

Zamiast przesuwać obraz na tarczy zegarka, zaktualizuj elementy na obrazie i zachowaj jego ramkę ograniczającą w tym samym miejscu w stosunku do tarczy zegarka. Jeśli na przykład chcesz animować okrąg na tarczy zegarka, pomyśl o zmianie jego koloru zamiast przewijania go po tarczy.

Ta technika zmniejsza rozmiar ograniczającego prostokąta obliczanego przez system dla animacji.

usuwanie duplikatów obrazów,

Jeśli tarcza zegarka wyświetla wiele kopii tego samego obrazu, umieść w katalogu zasobów tylko jedną kopię tego obrazu i odwołuj się do niej wielokrotnie.

Wyświetlanie postępu za pomocą łuków

Aby emulować pasek postępu, który wypełnia się po 1 minucie lub po 1 godzinie, nie używaj 60 osobnych obrazów. Zamiast tego utwórz obiekt Arc, który zawiera wyrażenie kontrolujące jego długość, jak pokazano w tym fragmencie kodu:

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

Aby wyświetlić linię nieciągłą, np. w celu uzyskania wyglądu w stylu retro, użyj właściwości kreski dla obiektu Stroke lub przezroczystej maski w postaci nakładki obrazu.

umieść wskazówki i widżety na końcu pliku źródłowego.

Węzły XML są rysowane w kolejności, w jakiej występują w źródłowym pliku XML. Umieszczenie wskazówek i komplikacji zegarka na końcu pliku pozwala systemowi wyeliminować całą warstwę z obliczeń pamięci trybu ambient.

Ocena wykorzystania pamięci przez tarczę zegarka

Aby zmierzyć wykorzystanie pamięci przez tarczę zegarka, użyj narzędzia do oceny wykorzystania pamięci, które jest dostępne w repozytorium watchface na GitHubie.