Optymalizowanie wykorzystania pamięci przez tarczę zegarka

Aby zapewnić jak najdłuższy czas pracy na baterii urządzeń z Wear OS, system oblicza wykorzystanie pamięci. Zgodnie ze wskazówkami dotyczącymi jakości aplikacji na Wear OS tarcze zegarka korzystające z formatu tarczy zegarka mają ograniczenia dotyczące ilości pamięci, którą mogą wykorzystać. Są one zależne od stanu zegarka:

  • W trybie nieaktywnym tarcza zegarka nie może wykorzystać 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ę bitmapy na tarczy zegarka, która korzysta z formatu tarczy zegarka, system wykonuje te czynności:

  1. Dekompresuje obraz lub czcionkę bitmapy.
  2. Sprawdza obraz lub czcionkę bitmapową, aby sprawdzić, czy można je zoptymalizować na jeden z tych sposobów:
    • Zmieniono rozmiar, aby lepiej dopasować do rozmiaru wyświetlacza.
    • Przycięto, aby usunąć w pełni przezroczyste piksele.
    • Obniżono jakość do RGB565, jeśli można to zrobić bez utraty jakości.

Na podstawie wynikowej ramki ograniczającej system oblicza rozmiar obrazu lub czcionki bitmapy (w bajtach) w jeden z tych sposobów:

  • W przypadku obrazów i czcionek ze RGBA8888: \( 4 \times width \times height \)
  • W przypadku obrazów i czcionek RGB565: \( 2 \times width \times height \)
  • W przypadku obrazów i czcionek, które korzystają z konfiguracji mapy bitowej ALPHA_8: \( width \times height \)

Tryb interaktywny

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

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

Konfiguracje

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

Tryb nieaktywny i warstwy

W przypadku trybu nieaktywnego system zakłada, że zegarek jest renderowany w ramach maksymalnie 3 warstw pełnoekranowych, z których 2 są całkowicie statyczne:

  1. Wszystko pod elementami zegarka Większą część „korpusu” tarczy umieszcza się w tej warstwie. Nie ma znaczenia, ile obrazów zostanie użytych do narysowania tej warstwy – system liczy ją jako jeden obraz na pełnym ekranie.
  2. Wszelkie zegarki, wyświetlacz cyfrowy lub widżety z powiązaniami platformy, które są renderowane dynamicznie.
  3. Wszystkie elementy wymienione po wskazówek i widżetach w źródłowym pliku XML.

Zwykle w trybie nieaktywnym większość pamięci pochodzi z czcionek bitmapowych, zwłaszcza dużych.

Metody ograniczania wykorzystania pamięci

Postępując zgodnie z sugestiami w tych sekcjach, zwiększysz prawdopodobieństwo utworzenia tarczy zegarka, której zużycie pamięci mieści się w wyznaczonych limitach.

Przycinanie i zmienianie rozmiaru czcionek bitmapowej

Przycinaj obrazy oraz obiekty BitmapFont i zmieniaj ich rozmiar, aby pasowały do rozmiarów wyświetlacza.

Gdy Wear OS rysuje 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. Jeśli jednak jest wyświetlany na ekranie o rozdzielczości 450 x 450 pikseli, system dekompresuje go, co zwiększa jego rozmiar w pamięci do co najmniej 750 KB.

Używaj spójnych wysokości czcionek na mapie bitowej

Gdy używasz polecenia BitmapFont, wszystkie obrazy danego znaku powinny mieć tę samą wysokość. Podobnie wszystkie obrazy powiązane ze słowami powinny mieć tę samą wysokość.

Używaj spójnych rozmiarów klatek w animacjach

Zamiast przesuwać obraz po tarczy zegarka, zaktualizuj elementy na obrazie i utrzymuj ramki ograniczające w tym samym miejscu względem tarczy zegarka. Jeśli np. chcesz animować okrąg na tarczy zegarka, możesz zmienić jego kolor, zamiast obracać okrąg po tarczy.

Ta metoda zmniejsza rozmiar ramki ograniczającej, którą system oblicza dla animacji.

Usuwanie duplikatów obrazów

Jeśli tarcza zegarka wyświetla kilka kopii tego samego obrazu, wczytaj do pamięci tylko jedną kopię tego obrazu i umieść kilka odwołań do niego.

Pokaż postęp za pomocą łuków

Jeśli chcesz emulować pasek postępu, który kończy się po minucie lub po godzinie, nie używaj 60 osobnych obrazów. Zamiast tego utwórz obiekt Arc zawierający wyrażenie kontrolujące jego długość, jak pokazano na 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ć nieciągłą linię, na przykład uzyskać wygląd retro cyfrowego zegarka, użyj właściwości myślnika obiektu Stroke lub półprzezroczystej nakładki z obrazem maski.

Umieść wskazówki z zegarkiem i widżety na końcu pliku źródłowego

Węzły XML są rysowane w kolejności, w której są wymienione w źródłowym pliku XML. Gdy umieścisz wskazówki zegarka i widżety na końcu pliku, system eliminuje całą warstwę z obliczenia pamięci w trybie nieaktywnym.

Sprawdzanie wykorzystania pamięci przez tarczę zegarka

Aby zmierzyć wykorzystanie pamięci przez tarczę zegarka, użyj narzędzia do oceny ilości pamięci dostępnego w repozytorium watchface na GitHubie.