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:
- Resim dosyalarınızı mümkün olduğunca küçük olacak şekilde ölçeklendirin (çıktı görüntüsünü etkilemeden).
- Resimlerinizi JPEG veya PNG yerine WEBP biçimine dönüştürmeyi düşünün.
- Farklı ekran çözünürlükleri için daha küçük resimler sağlayın (3. İpucu'na bakın),
- Resminizi ekrandaki görüntü boyutuna uygun olacak şekilde küçülten bir resim yükleme kitaplığı kullanın. Bu, ekranınızın yükleme performansını iyileştirmeye yardımcı olabilir.
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.
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken görüntülenir
- ImageBitmap ve ImageVector {:#bitmap-vs-vector}
- Oluşturma penceresinde kullanıcı arayüzü durumunu kaydetme
- Jetpack Oluşturma Aşamaları