Kadranınız için bellek kullanımını optimize edin

Sistem, Wear OS cihazların mümkün olan en iyi pil ömrünü sunmak için bellek kullanımı hesaplaması yapar. Wear OS uygulama kalitesi yönergelerinin bir parçası olarak, Saat Kadranı Biçimini kullanan kadranların kullanabileceği bellek miktarı, saatin mevcut durumuna bağlı olarak sınırlıdır:

  • Ambiyans modunda, saat yüzü 10 MB'tan fazla bellek tüketemez.
  • Etkileşimli modda saat yüzü 100 MB'tan fazla bellek tüketemez.

Sistem, bir kadranın bellek kullanımını hesaplar

Sistem, Saat Kadranı Biçimini kullanan kadrandaki bir resmin veya bit eşlem yazı tipinin kapladığı boyutu hesaplamak için aşağıdaki adımları tamamlar:

  1. Resmin veya bit eşlem yazı tipinin sıkıştırmasını açar.
  2. Aşağıdaki yöntemlerden biriyle optimize edilip edilemeyeceğini görmek için resmi veya bit eşlem yazı tipini inceler:
    • Ekran boyutuyla daha iyi eşleşecek şekilde yeniden boyutlandırıldı.
    • Tamamen şeffaf pikselleri kaldırmak için kırpıldı.
    • Bu işlem, doğruluk kaybı olmadan gerçekleştirilebilirse RGB565'e düşürülür.

Sonuçta ortaya çıkan sınırlayıcı kutuya göre sistem, resmin veya bit eşlem yazı tipinin boyutunu aşağıdakilerden biri olacak şekilde bayt cinsinden hesaplar:

  • RGBA8888 kullanan resimler ve yazı tipleri için: \( 4 \times width \times height \)
  • RGB565 kullanan resimler ve yazı tipleri için: \( 2 \times width \times height \)
  • ALPHA_8 bit eşlem yapılandırmasını kullanan resimler ve yazı tipleri için: \( width \times height \)

Etkileşimli mod

Etkileşimli mod için bellek kullanımı hesaplanırken sistem aşağıdakilerin toplamını hesaplar:

  1. Tüm vektör yazı tiplerinin işlenmemiş boyutu.
  2. Sistemin varsayılan yazı tipinin tahmini kullanımı.
  3. Kırpma, yeniden boyutlandırma veya yeniden biçimlendirme uygulandıktan sonra resimlerin ve bit eşlem yazı tiplerinin toplam boyutu.

Yapılandırmalar

Yapılandırma içeren kadranlar için sistem, farklı yapılandırmalarda kullanılan kaynakların toplam boyutunu hesaplamaya çalışır. Bazen çok sayıda kombinasyon olduğunda sistem, farklı yapılandırmalarda aynı anda kaç kaynağın kullanıldığını biraz fazla tahmin eder.

Ambiyans modu ve katmanlar

Ambiyans modu için sistem, saatin ikisi tamamen statik olan en fazla üç tam ekran katmanı kullanılarak oluşturulduğunu varsayar:

  1. Saat öğelerinin altındaki her şey. Kadranın "gövdesi"nin çoğu bu katmanda birleştirilir. Bu katmanı çizmek için kaç resmin kullanıldığı önemli değildir; sistem bunu tek bir tam ekran resim olarak sayar.
  2. Tüm kol saatleri, dijital ekran veya dinamik olarak oluşturulan platform bağlantıları özellikleri.
  3. Kol saati ellerinden sonra listelenen tüm öğeler ve kaynak XML dosyasındaki özelliklerden sonra gelen özellikler.

Genellikle ambiyans modunda bellek kullanımının çoğu bit eşlem yazı tiplerinden, özellikle de büyük olanlardan gelir.

Bellek kullanımını azaltma yöntemleri

Bu bölümlerdeki önerileri uygulayarak bellek tüketimi bu sınırlar içinde kalan bir kadran oluşturma olasılığınız artar.

Bit eşlem yazı tiplerini kırpma ve yeniden boyutlandırma

Resimlerinizi ve BitmapFont nesnelerinizi kırpın ve görüntü boyutlarına uyacak şekilde yeniden boyutlandırın.

Wear OS bir saat yüzü çizdiğinde tüm resimler sıkıştırılmış halde açılır. Çoğunlukla boş olan tam ekran bir görüntü diskte 3 KB kullanabilir, ancak 450 piksel x 450 piksel bir ekranda görüntülenirse sistem resmin sıkıştırmasını açarak resmin bellekteki boyutunu 750 KB veya daha büyük bir değere çıkarır.

Tutarlı bit eşlem yazı tipi yükseklikleri kullan

BitmapFont kullanılırken bir karaktere ait tüm resimler aynı yüksekliğe sahip olmalıdır. Benzer bir şekilde, kelimelere ilişkin tüm resimler aynı yüksekliğe sahip olmalıdır.

Animasyonlarda tutarlı kare boyutları kullanın

Bir resmi kadranda taşımak yerine, resimdeki öğeleri güncelleyin ve sınırlama kutusunu kadrana göre aynı konumda tutun. Örneğin, saat kadranınızda bir daire animasyonu istiyorsanız daireyi saat yüzü boyunca döndürmek yerine dairenin rengini değiştirmeyi düşünün.

Bu teknik, sistemin animasyon için hesapladığı sınırlama kutusunun boyutunu azaltır.

Görüntüleri tekilleştir

Kadranınızda aynı resmin birden fazla kopyası gösteriliyorsa bu resmin yalnızca bir kopyasını belleğe yükleyin ve söz konusu görsele birkaç kez referans verin.

Yay kullanarak ilerlemeyi gösterme

1 dakika veya 1 saat sonra tamamlanan bir ilerleme çubuğu emülasyonu için 60 ayrı resim kullanmayın. Bunun yerine, aşağıdaki kod snippet'inde gösterildiği gibi, uzunluğunu kontrol eden bir ifade içeren bir Arc nesnesi oluşturun:

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

Örneğin, retro dijital saat tarzı bir görünüm elde etmek amacıyla kesintisiz bir çizgi görüntülemek için Stroke nesnesi için kısa çizgi özelliği veya yarı şeffaf maske resmi yer paylaşımı kullanın.

Kol saati kollarını ve özelliklerini kaynak dosyanın sonuna koyun

XML düğümleri kaynak XML dosyasında listelendikleri sırayla çizilir. Sistem, elleri ve özellikleri dosyanın sonuna yerleştirip ambiyans modu bellek hesaplamasından bir katmanı tamamen ortadan kaldırır.

Kadranınızın bellek kullanımını değerlendirin

Kadranınızın bellek kullanımını ölçmek için GitHub'daki watchface deposunda bulunan bellek ayak izi değerlendirici aracını kullanın.