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ü sağlamak için bellek kullanımı hesaplaması yapar. [Wear OS uygulama kalitesi yönergeleri][1] uyarınca, Saat Kadranı Formatı'nı kullanan kadranların kullanabileceği bellek miktarı, saatin mevcut durumuna bağlı olarak sınırlandırılmıştır:

  • [Ambiyans modu][2] açıkken kadran, 10 MB'tan fazla bellek tüketemez.
  • Etkileşimli modda kadran, 100 MB'tan fazla bellek kullanamaz.

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

Sistem, Saat Kadranı Formatı'nı kullanan bir kadranda bulunan resmin veya bit eşlem yazı tipinin boyutunu hesaplamak için aşağıdaki adımları uygular:

  1. Resmin veya bit eşlem yazı tipinin sıkıştırmasını açar.
  2. Aşağıdaki yöntemlerden biriyle optimize edilip edilmeyeceğini görmek için resmi veya bit eşlem yazı tipini inceler:
    • Görüntü boyutuyla daha iyi eşleşmesi için yeniden boyutlandırıldı.
    • Tamamen şeffaf pikselleri kaldırmak için kırpıldı.
    • Bu işlem kalite kaybı olmadan yapılabilirse [RGB565][3]{: .external} değerine küçültülür.

Ortaya çıkan sınırlayıcı kutuya bağlı olarak sistem, görüntünün veya bit eşlem yazı tipinin boyutunu aşağıdakilerden biri şeklinde bayt cinsinden hesaplar:

  • [RGBA8888][4]{: .external}: \( 4 \times width \times height \)kullanan resimler ve yazı tipleri için:
  • 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

Sistem, etkileşimli mod için bellek kullanımını hesaplarken aşağıdakilerin toplamını hesaplar:

  1. Herhangi bir [vektör yazı tipinin][5] işlenmemiş boyutu.
  2. Sistemin varsayılan yazı tipinin tahmini kullanımı.
  3. Herhangi bir 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ırmalar][6] 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 kullanılan kaynak sayısını biraz aşan bir tahminde bulunur.

Ambiyans modu ve katmanlar

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

  1. Saat öğelerinin altındaki her şey. Kadranın "gövdesinin" büyük bir kısmı bu katmanda birleştirilmiştir. Bu katmanı çizmek için kaç resim kullanıldığı önemli değildir; sistem bunu tek bir tam ekran resim olarak sayar.
  2. Dinamik olarak oluşturulan platform bağlamaları içeren tüm kadranlar, dijital ekranlar veya komplikasyonlar.
  3. Kaynak XML dosyasındaki saatlerden ve özelliklerden sonra listelenen tüm öğeler.

Ambiyans modunda genellikle bellek kullanımının çoğu, özellikle büyük olan bit eşlem yazı tiplerinden gelir.

Bellek kullanımını azaltma yöntemleri

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

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

Resimlerinizi ve [BitmapFont][7] nesnenizi kırpıp görüntü boyutlarına uyacak şekilde yeniden boyutlandırın.

Wear OS bir kadran çizdiğinde tüm resimler açılır. Çoğunlukla boş olan tam ekran bir resim diskte 3 KB yer kaplayabilir. Ancak bu resim 450 piksel x 450 piksel boyutunda bir ekranda görüntülenirse sistem, resmi sıkıştırarak resmin bellekteki boyutunu 750 KB veya daha büyük hale getirir.

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

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

Animasyonlarda tutarlı kare boyutları kullanın

Bir resmi, kadrana göre hareket ettirmek yerine resimdeki öğeleri güncelleyin ve sınırlayıcı kutuyu kadrana göre aynı konumda tutun. Örneğin, kadranınızda bir daireye animasyon eklemek istiyorsanız, daireyi saat kadranı boyunca yuvarlamak yerine rengini değiştirmeyi deneyin.

Bu teknik, sistemin animasyon için hesapladığı sınırlayıcı kutunun boyutunu azaltır.

Resimleri tekilleştirin

Kadranınızda aynı resmin birden fazla kopyası gösteriliyorsa belleğe bu resmin yalnızca bir kopyasını yükleyin ve bu resme birden fazla referans verin.

Yayınları kullanarak ilerleme durumunu gösterme

1 dakika sonra veya 1 saat sonra tamamlanan bir ilerleme çubuğu emülasyonu yapmak 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][8] 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 olmayan bir çizgi görüntülemek için [Stroke][9] nesnesi için kısa çizgi özelliği veya yarı şeffaf maske resmi yer paylaşımı kullanın.

Kol saati ellerini ve özelliklerini kaynak dosyanın sonuna yerleştirin

XML düğümleri, kaynak XML dosyasında listelendikleri sırayla çizilir. Sistem, saatin ellerini ve özelliklerini dosyanın sonuna koyarak tüm katmanı ambiyans modu bellek hesaplamasından 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][10] deposunda yer alan bellek ayak izi değerlendirme aracını kullanın.