Compose, türleri kararlı veya kararsız olarak kabul eder. Bir tür, sabittir veya Compose'un değerinin dört farklı yöntem sunar. Compose aşağıdaki güvenlik durumunu bilemiyorsa, bir tür kararsızdır: yeniden besteler arasında değeri değişti.
Compose, bir composable'ın parametrelerinin kararlılığını kullanarak yeniden düzenleme sırasında composable'ı atlayabilir:
- Kararlı parametreler: Bir composable'ın değiştirildiğinde, Compose bu adımı atlar.
- Kararsız parametreler: Bir composable'ın kararsız parametreleri varsa Compose'u kullanabilirsiniz. bileşenin üst öğesini yeniden oluşturduğunda her zaman yeniden oluşturur.
Uygulamanız, Compose'un her zaman gerektiği gibi çalışmasını istemediğiniz çok sayıda kararsız bileşen içeriyorsa performans sorunları ve başka sorunlar gözlemleyebilirsiniz.
Bu dokümanda, uygulamanızın kararlılığını iyileştirmek için nasıl performans ve genel kullanıcı deneyimi.
Sabit nesneler
Aşağıdaki snippet'lerde kararlılık ve bile olabilir.
Contact
sınıfı sabit bir veri sınıfıdır. Çünkü tüm proje yönetimi süreçlerinin
parametreleri, val
anahtar kelimesiyle tanımlanan temel öğelerdir. Bir
Contact
örneği için, nesne özelliklerinin değerini değiştiremezsiniz.
Bunu yapmaya çalıştıysanız yeni bir nesne oluştururdunuz.
data class Contact(val name: String, val number: String)
ContactRow
composable, Contact
türünde bir parametreye sahip.
@Composable
fun ContactRow(contact: Contact, modifier: Modifier = Modifier) {
var selected by remember { mutableStateOf(false) }
Row(modifier) {
ContactDetails(contact)
ToggleButton(selected, onToggled = { selected = !selected })
}
}
Kullanıcının açma/kapatma düğmesini ve
selected
durum değişikliği:
- Compose,
ContactRow
içindeki kodu yeniden oluşturup oluşturmayacağını değerlendirir. ContactDetails
için tek bağımsız değişkeninContact
türünde olduğunu görüyor.Contact
sabit bir veri sınıfı olduğundan Compose, şunlardan hiçbirininContactDetails
için bağımsız değişkenler değişti.- Bu nedenle, Compose'da
ContactDetails
atlanır ve yeniden oluşturulmaz. - Öte yandan,
ToggleButton
işlevinin bağımsız değişkenleri değişti ve Compose söz konusu bileşeni yeniden oluşturur.
Değişebilir nesneler
Yukarıdaki örnekte sabit bir nesne kullanılsa da, bir nesnedir. Aşağıdaki snippet'i göz önünde bulundurun:
data class Contact(var name: String, var number: String)
Contact
işlevinin her parametresi artık var
olduğundan sınıf artık sabit değil.
Özellikleri değişirse Compose bundan haberdar olmaz. Çünkü
Yalnızca Oluştur Durum nesnelerinde yapılan değişiklikleri izler.
Compose, bu tür bir sınıfı kararsız olarak kabul eder. Oluşturma işleminde,
istikrarsız sınıflar. Dolayısıyla, Contact
bu şekilde tanımlansaydı ContactRow
örneği, selected
her değiştiğinde yeniden oluşturulur.
Compose'da uygulama
E-posta yazmanın tam olarak nasıl kullanılabileceği, çok da önemli olmasa da yeniden oluşturma sırasında hangi işlevlerin atlanacağını belirler.
Compose derleyici, kodunuzda çalıştığında her işlevi ve türü işaretler. birkaç etiketten biriyle değiştirin. Bu etiketler, Compose'un işlevi veya yazması gerekir.
Fonksiyonlar
Oluşturma işlevi, işlevleri skippable
veya restartable
olarak işaretleyebilir. Lütfen
bir işlevi aşağıdakilerden biri veya her ikisi olarak işaretleyin ya da hiçbiri olarak işaretlemeyin:
- Atlanabilir: Derleyici, bir composable'ı atlanabilir olarak işaretlerse Compose tüm argümanları önceki değerlere sahiptir.
- Yeniden başlatılabilir: Yeniden başlatılabilen bir composable, bir "kapsam" görevi görür burada: başlayabilirsiniz. Başka bir deyişle, fonksiyon bir Compose'un sonra yeniden oluşturmak üzere kodu yeniden çalıştırmaya başlayabileceği giriş kullanabilirsiniz.
Türler
Oluşturma işaretleri türlerini sabit veya sabit olarak işaretler. Her tür bir veya daha fazla diğer:
- Sabit: Bir türün değeri sabitse
özellikleri hiçbir zaman değiştirilemez ve tüm yöntemler referans olarak şeffaftır.
- Tüm temel türlerin sabit olarak işaretlendiğini unutmayın. Bunlardan bazıları
String
,Int
veFloat
.
- Tüm temel türlerin sabit olarak işaretlendiğini unutmayın. Bunlardan bazıları
- Kararlı: Yapım sonrasında özellikleri değişebilen bir türü belirtir. Bu özellikler çalışma zamanında değiştirilirse Compose, ortadan kaldırır.
Hata ayıklama kararlılığı
Uygulamanız, parametreleri değişmemiş bir composable'ı yeniden derliyorsa önce
açıkça değiştirilebilir olan parametreler olup olmadığını kontrol etmek için kullanılır. Her zaman oluştur
var
özellikleriyle bir tür veya val
ile bir tür geçirirseniz bir bileşeni yeniden oluşturur
bilinen kararsız türde bir mülk.
Bu sayfada kararlılıkla ilgili karmaşık sorunların nasıl Oluşturmak için Kararlılıkla ilgili hata ayıklama kılavuzuna bakın.
Kararlılıkla ilgili sorunları düzeltin
Compose uygulamanızı kararlı hale getirme hakkında bilgi için bkz. Kararlılık sorunlarını düzeltme kılavuzunu inceleyin.
Özet
Genel olarak aşağıdaki noktalara dikkat etmeniz gerekir:
- Parametreler: Oluşturduğunuz her parametrenin kararlılığını composable'ları kullanarak hangi composable'ı atlaması gerektiğini bile olabilir.
- Hemen düzeltmeler: composable'ınızın atlanmadığını fark ederseniz ve
bir performans sorununa yol açarsa bu hatanın
bariz nedenlerini kontrol etmeniz gerekir.
kararsızlığı ortaya çıkarır.
var
- Derleyici raporları: Derleyici raporlarını kullanarak şunları yapabilirsiniz: konusunda çıkarımda bulunmaktır.
- Koleksiyonlar: Oluşturma işlemi, koleksiyon sınıflarını her zaman kararsız olarak değerlendirir:
List, Set
veMap
olarak. Çünkü sistemdeki bir şeyin aynıdır. Bunun yerine Kotlinx sabit koleksiyonları kullanabilirsiniz veya sınıflarınıza@Immutable
veya@Stable
olarak ek açıklama ekleyin. - Diğer modüller: Oluşturma işleminde her zaman kararsız olanları dikkate alır. Compose derleyicisinin çalışmadığı modüller. Kullanıcı arayüzünde sınıfları sarmala model sınıflarını belirtin.
Daha fazla bilgi
- Performans: Oluşturma performansıyla ilgili daha fazla hata ayıklama ipucu için en iyi uygulamalar rehberimiz ve I/O konuşması.