Dikkatli olmazsanız resimlerle çalışırken kısa sürede performans sorunlarıyla karşılaşabilirsiniz. Büyük bit eşlemlerle çalışırken OutOfMemoryError
ile kolayca
çalışabilirsiniz. Uygulamanızın en iyi performansı göstermesini sağlamak 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ı oluşturan yüksek çözünürlüklü kameralara sahiptir. Ekranda bir resim gösteriyorsanız resmin çözünürlüğünü düşürmeniz veya resmi yalnızca resim kapsayıcınızın boyutuna kadar yüklemeniz gerekir. Gerekenden daha büyük görüntülerin sürekli yüklenmesi, GPU önbelleklerini tüketerek daha düşük performanslı kullanıcı arayüzü oluşturmalarına yol açabilir.
Resim boyutlarını yönetmek için:
- Resim dosyalarınızı mümkün olduğunca küçük olacak şekilde küçültün (çıktı resmini etkilemeden).
- JPEG veya PNG yerine resimlerinizi 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ünümünüze uyacak şekilde küçülten bir resim yükleme kitaplığı kullanın. Bu, ekranınızın yükleme performansını artırmanıza yardımcı olabilir.
Mümkün olduğunda bitmap yerine vektörleri kullanın
Bir nesneyi ekranda görsel olarak temsil ederken nesnenin vektör olarak temsil edilip edilemeyeceğine karar vermeniz gerekir. Farklı boyutlara ölçeklendirdiğinizde pikselleşmediği için bitmap yerine vektör resimleri tercih edin. Ancak her şey vektör olarak temsil edilemez. Kamerayla çekilen görüntüler vektöre dönüştürülemez.
Farklı ekran boyutları için alternatif kaynaklar sağlama
Uygulamanızla birlikte resim gönderiyorsanız farklı cihaz çözünürlükleri için farklı boyutlarda öğeler sağlayabilirsiniz. Bu, cihazlardaki uygulamanızın indirme boyutunu azaltmanıza ve daha düşük çözünürlüklü bir cihazda daha düşük çözünürlüklü bir resim yükleyeceğinden performansı iyileştirmenize yardımcı olabilir. Farklı cihaz boyutları için alternatif bit eşlemler sağlama hakkında daha fazla bilgi edinmek isterseniz alternatif bit eşleme belgelerine göz atın.
ImageBitmap
'ü kullanırken çizim yapmadan önce prepareToDraw
'ü arayın
ImageBitmap
kullanırken dokuyu GPU'ya yükleme işlemini başlatmak için çizmeden önce ImageBitmap#prepareToDraw()
yöntemini çağırın. Bu, GPU'nun dokuyu hazırlamasına ve ekranda görsel gösterme performansını artırmasına yardımcı olur. Çoğu resim yükleme kitaplığı bu optimizasyonu zaten uygulamaktadır ancak ImageBitmap
sınıfıyla kendiniz çalışıyorsanız bunu göz önünde bulundurmanız gerekir.
Painter
yerine, Int
DrawableRes
veya URL'yi parametre olarak kompozisyonunuza göndermeyi tercih edin.
Resimlerle çalışmanın karmaşıklığı nedeniyle (örneğin, Bitmaps
için bir eşittir işlevi yazmak hesaplama açısından pahalı olur), Painter
API'si açıkça Kararlı sınıfı olarak işaretlenmemiştir. Derleyici, verilerin değişip değişmediğini kolayca tahmin edemediğinden kararsız sınıflar, gereksiz yeniden oluşturmalara yol açabilir.
Bu nedenle, parametre olarak Painter
iletmek yerine, composable'ınıza parametre olarak bir URL veya çekilebilir kaynak kimliğinin iletilmesi tercih edilir.
// Prefer this:
@Composable
fun MyImage(url: String) {
}
// Over this:
@Composable
fun MyImage(painter: Painter) {
}
Bir bitmap'i, ihtiyacınız olandan daha uzun süre bellekte saklamayın
Belleğe ne kadar fazla bit eşlem yüklerseniz cihazdaki belleğin bitme ihtimali o kadar artar. Örneğin, ekrana büyük bir resim bileşimi listesi yüklüyorsanız büyük bir listede gezinirken belleğin boşaltılmasını sağlamak için LazyColumn
veya LazyRow
tuşlarını kullanın.
Büyük resimleri AAB/APK dosyanızla birlikte paketlemeyin
Uygulama indirme boyutunun büyük olmasının en önemli nedenlerinden biri, AAB veya APK dosyasına paketlenmiş grafiklerdir. Gerekenden daha büyük resim dosyalarını paketlemediğinizden emin olmak için APK analiz edici aracını kullanın. Boyutları azaltın veya resimleri bir sunucuya yerleştirip yalnızca gerektiğinde indirmeyi düşünün.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- ImageBitmap ve ImageVector {:#bitmap-vs-vector}
- Oluştur'da kullanıcı arayüzü durumunu kaydetme
- Jetpack Compose Aşamaları