Kararlılık sorunlarını teşhis etme

Gereksiz veya uyumlu işlemlerden kaynaklanan performans sorunları yaşıyorsanız yeniden bestelemezseniz uygulamanızın kararlılığında hata ayıklamanız gerekir. Bu kılavuz bunun için çeşitli yöntemleri özetliyor.

Düzen Denetleyicisi

Android Studio'daki Düzen Denetleyicisi, hangi composable'ların en iyi uygulamaları paylaşacağız. Compose'un bu metinle kaç defa veya bir bileşeni atladı.

Düzen İnceleyici'de yeniden düzenleme ve atlama sayıları

Derleyici raporları oluşturma

Compose derleyicisi, inceleme. Bu çıkışı kullanarak composable'larınızdan hangilerinin atlanabilen ve olmayanlar. Aşağıdaki alt bölümlerde bu politikaların ancak daha ayrıntılı bilgi için teknik dokümanlarına göz atın.

Kurulum

Derleyici raporları oluşturma özelliği varsayılan olarak etkin değildir. Bunları şununla etkinleştirebilirsiniz: derleyici işaretidir. Tam kurulum, kullandığınız ada projesidir, ancak Compose derleyici gradle eklentisini kullanan projeler için her modül build.gradle dosyasına aşağıdakileri ekleyin.

  android { ... }

  composeCompiler {
    reportsDestination = layout.buildDirectory.dir("compose_compiler")
    metricsDestination = layout.buildDirectory.dir("compose_compiler")
  }

Derleyici raporları oluşturma artık projenizi derlerken oluşturulacak.

Örnek çıkış

reportsDestination üç dosya çıktısı verir. Aşağıda örnek çıkışlar verilmiştir JetSnack'ten.

  • <modulename>-classes.txt: Bu modülünü kullanabilirsiniz. Örnek.
  • <modulename>-composables.txt: Ne kadar yeniden başlatılabileceği ve modüldeki gibi, atlanabilir composable'ların Örnek.
  • <modulename>-composables.csv: composables raporunun CSV sürümü içe aktarabilirsiniz. Örnek
ziyaret edin.

Oluşturulabilirler raporu

composables.txt dosyası, verilen modülünün parametrelerinin kararlılığı ve yüksek performanslı olup olmadıkları veya atlanabilir. Bu örnekte Google’ın JetSnack:

restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun SnackCollection(
  stable snackCollection: SnackCollection
  stable onSnackClick: Function1<Long, Unit>
  stable modifier: Modifier? = @static Companion
  stable index: Int = @static 0
  stable highlight: Boolean = @static true
)

Bu SnackCollection composable tamamen yeniden başlatılabilir, atlanabilir ve kararlı hale getirebilirsiniz. Zorunlu olmasa da bu genellikle tercih edilir.

Diğer taraftan, şimdi başka bir örneğe bakalım.

restartable scheme("[androidx.compose.ui.UiComposable]") fun HighlightedSnacks(
  stable index: Int
  unstable snacks: List<Snack>
  stable onSnackClick: Function1<Long, Unit>
  stable modifier: Modifier? = @static Companion
)

HighlightedSnacks composable, atlanabilir değil. Besteleme özelliği hiçbir zaman atlanmaz bazı ipuçları vereceğim. Bu durum, parametrelerinden hiçbiri değişmemiş olsa bile ortaya çıkar. Bunun nedeni unstable parametresidir (snacks).

Sınıf raporu

classes.txt dosyası, verilen modülünü kullanabilirsiniz. Aşağıdaki snippet, Snack sınıfının çıktısıdır:

unstable class Snack {
  stable val id: Long
  stable val name: String
  stable val imageUrl: String
  stable val price: Long
  stable val tagline: String
  unstable val tags: Set<String>
  <runtime stability> = Unstable
}

Referans olması amacıyla, Snack öğesinin tanımı aşağıdaki gibidir:

data class Snack(
    val id: Long,
    val name: String,
    val imageUrl: String,
    val price: Long,
    val tagline: String = "",
    val tags: Set<String> = emptySet()
)

Compose derleyicisi Snack kararsız olarak işaretlendi. Bunun nedeni, projenizin tags parametresi Set<String>. Bu sabit bir türdür çünkü bir MutableSet değil. Ancak Set, List gibi standart koleksiyon sınıfları, ve Map, nihai olarak arayüzdür. Dolayısıyla, temel uygulama, olabilir.

Örneğin, val set: Set<String> = mutableSetOf("foo") yazabilirsiniz. İlgili içeriği oluşturmak için kullanılan değişkeni sabittir ve bildirilen türü değiştirilemez ancak uygulama hâlâ değişebilir. Compose derleyicisi sabitliğini korur. Bu nedenle, tags kararlı değil.