Oluşturulmada Kararlılık

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:

  1. Compose, ContactRow içindeki kodu yeniden oluşturup oluşturmayacağını değerlendirir.
  2. ContactDetails için tek bağımsız değişkenin Contact türünde olduğunu görüyor.
  3. Contact sabit bir veri sınıfı olduğundan Compose, şunlardan hiçbirinin ContactDetails için bağımsız değişkenler değişti.
  4. Bu nedenle, Compose'da ContactDetails atlanır ve yeniden oluşturulmaz.
  5. Ö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 ve Float.
  • 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.
ziyaret edin.

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 ve Map 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