Performansı resimler için optimize etme

Dikkatli değilseniz resimlerle çalışmak, hızlı bir şekilde performans sorunlarına yol açabilir. Büyük bit eşlemlerle çalışırken bir OutOfMemoryError ile kolayca karşılaşabilirsiniz. Uygulamanızın en iyi performansı gösterdiğinden emin olmak için bu en iyi uygulamaları izleyin.

Yalnızca ihtiyacınız olan bit eşlemin boyutunu yükleyin

Çoğu akıllı telefon, büyük görüntü dosyaları üreten yüksek çözünürlüklü kameralara sahiptir. Ekranda bir resim gösteriyorsanız resmin çözünürlüğünü azaltmanız veya resmi yalnızca görüntü kapsayıcınızın boyutuna kadar yüklemeniz gerekir. İhtiyaçtan daha büyük görüntülerin sürekli olarak yüklenmesi, GPU önbelleklerini tüketerek daha düşük performanslı kullanıcı arayüzü oluşturulmasına neden olabilir.

Resim boyutlarını yönetmek için:

Mümkün olduğunda bit eşlemler yerine vektör kullanın

Bir şeyi ekranda görsel olarak temsil ederken, o öğenin vektör olarak temsil edilip edilemeyeceğine karar vermeniz gerekir. Farklı boyutlara ölçeklendirdiğinizde pikselleşmedikleri için vektör resimleri bit eşlemler yerine tercih edin. Ancak her şey vektör olarak temsil edilemez ve fotoğraf makinesiyle çekilen resimler vektöre dönüştürülemez.

Farklı ekran boyutları için alternatif kaynaklar sağlayın

Uygulamanızla resim gönderiyorsanız farklı cihaz çözünürlükleri için farklı boyutlarda öğeler sağlamayı düşünün. Bu, uygulamanızın cihazlardaki indirme boyutunu küçültmenize ve daha düşük çözünürlüklü bir cihaza daha düşük çözünürlüklü bir resim yüklemeye neden olacağı için performansı artırmanıza yardımcı olabilir. Farklı cihaz boyutlarına alternatif bit eşlemler sağlama hakkında daha fazla bilgi için alternatif bit eşlem belgelerine göz atın.

ImageBitmap kullanırken, çizimden önce prepareToDraw işlevini çağırın

ImageBitmap kullanırken dokuyu GPU'ya yükleme işlemini başlatmak için gerçekte çizim yapmadan önce ImageBitmap#prepareToDraw() yöntemini çağırın. Bu, GPU'nun dokuyu hazırlamasına yardımcı olur ve ekranda görsel gösterme performansını iyileştirir. Resim yükleme kitaplıklarının çoğu bu optimizasyonu zaten yapar ancak ImageBitmap sınıfıyla kendiniz çalışıyorsanız bu noktayı aklınızda bulundurmanız gerekir.

composable'a Painter yerine parametre olarak Int DrawableRes veya URL iletmeyi tercih edin

Görüntülerin işlenmesinin karmaşıklığı nedeniyle (örneğin, Bitmaps için eşittir işlevi yazmak işlem açısından pahalı olabilir) Painter API açıkça Kararlı sınıfı olarak işaretlenmez. Derleyici, verilerin değişip değişmediğini kolayca tahmin edemeyeceğinden kararsız sınıflar gereksiz yeniden oluşturma işlemlerine yol açabilir.

Bu nedenle, parametre olarak Painter iletmek yerine composable'ınıza parametre olarak bir URL veya çekilebilir kaynak kimliği iletmek tercih edilir.

// Prefer this:
@Composable
fun MyImage(url: String) {

}
// Over this:
@Composable
fun MyImage(painter: Painter) {

}

Bit eşlemi bellekte ihtiyacınızdan daha uzun süre saklamayın

Belleğe ne kadar çok bit eşlem yüklerseniz cihazdaki belleğin kalma olasılığı o kadar artar. Örneğin, ekranda çok sayıda Imagecomposable listesi yüklüyorsanız büyük bir listeyi kaydırırken bellekte yer açmak için LazyColumn veya LazyRow kullanın.

Büyük resimleri AAB/APK dosyanızla paketlemeyin

Uygulama indirme boyutunun büyük olmasının en önemli nedenlerinden biri, AAB veya APK dosyası içinde paketlenmiş grafiklerdir. Gerekli resim dosyalarından daha büyük boyutlarda paketlemediğinizden emin olmak için APK analiz edici aracını kullanın. Boyutları küçültün veya resimleri bir sunucuya yerleştirmeyi ve yalnızca gerektiğinde indirmeyi deneyin.