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 kalite yönergeleri kapsamında, saat kadranı biçimini kullanan kadranlar, saatin mevcut durumuna bağlı olarak kullanabilecekleri bellek miktarı açısından sınırlara sahiptir:

  • Ambiyans modunda kadran 10 MB'tan fazla bellek kullanamaz.
  • Etkileşimli modda kadran 100 MB'tan fazla bellek kullanamaz.

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

Sistem, kadran biçimini kullanan bir kadranda bir resim veya bitmap yazı tipinin kapladığı alanı hesaplamak için aşağıdaki adımları tamamlar:

  1. Resmin veya bitmap yazı tipinin sıkıştırmasını kaldırır.
  2. Aşağıdaki yöntemlerden biriyle optimize edilip edilmeyeceğini görmek için resmi veya bit eşlem yazı tipini inceler:
    • Ekran boyutuna daha uygun olacak şekilde yeniden boyutlandırılır.
    • Tamamen şeffaf pikselleri kaldırmak için kırpılmıştır.
    • Gerçeklik kaybı olmadan yapılabiliyorsa RGB565 olarak aşağı örneklenir.

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 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 bitmap 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. Tüm vektor 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 bitmap yazı tiplerinin toplam boyutu.

Yapılandırmalar

Sistem, yapılandırmalar içeren kadranlar için farklı yapılandırmalarda kullanılan kaynakların toplam boyutunu hesaplamaya çalışır. Çok sayıda kombinasyon olduğunda sistem, farklı yapılandırmalarda aynı anda ne kadar kaynak kullanıldığını biraz fazla tahmin edebilir.

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 "gövdesinin" çoğu bu katmanda birleştirilir. Bu katmanın çizilmesi 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ına sahip tüm kadran ibreleri, dijital ekranlar veya komplikasyonlar.
  3. Kaynak XML dosyasında kadran ibreleri ve komplikasyonlardan sonra listelenen tüm öğeler.

Genellikle ambiyans modunda en fazla bellek kullanımı, özellikle büyük olanlar olmak üzere bit eşlem yazı tiplerinden kaynaklanır.

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.

Bitmap yazı tiplerini kırpma ve yeniden boyutlandırma

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

Wear OS bir kadran çizerken tüm resimlerin sıkıştırması kaldırılır. Çoğunlukla boş olan tam ekran bir resim diskte 3 KB'lık yer kaplar ancak 450 piksel x 450 piksel ekranda gösterilirse sistem resmin sıkıştırmasını kaldırarak bellekteki boyutunu 750 KB veya daha büyük hale getirir.

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

BitmapFont kullanıldığında, bir karakterin tüm resimlerinin yüksekliği aynı 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, kadranda taşımak yerine resim içindeki öğeleri güncelleyin ve sınırlayıcı kutuyu kadrana göre aynı konumda tutun. Örneğin, kadranınızda bir daireyi hareket ettirmek istiyorsanız daireyi kadran üzerinde kaydırarak değil, rengini değiştirerek hareket ettirebilirsiniz.

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

Resimleri tekilleştirme

Kadranınızda aynı resmin birden fazla kopyası gösteriliyorsa bu resmin yalnızca bir kopyasını kaynak dizininize ekleyin ve bu kopyaya birden fazla kez referans verin.

Yayınları kullanarak ilerleme durumunu gösterme

1 dakika veya 1 saat sonra tamamlanan bir ilerleme çubuğunu taklit etmek 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 için kesintisiz olmayan bir çizgi görüntülemek istiyorsanız Stroke nesnesi için kısa çizgi özelliğini veya yarı saydam maske resim yer paylaşımını kullanın.

Kol saati ibrelerini ve komplikasyonları kaynak dosyanın sonuna yerleştirin

XML düğümleri, kaynak XML dosyasında listelendikleri sırayla çizilir. Sistem, kol saati ibrelerini ve komplikasyonları dosyanın sonuna yerleştirerek ortam modu bellek hesaplamasından bir katmanın tamamını çıkarır.

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

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