Wenn Leistungsprobleme aufgrund unnötiger oder zu viele Neuzusammensetzungen aufweist, sollten Sie die Stabilität Ihrer App debuggen. Dieser Leitfaden werden verschiedene Methoden hierfür beschrieben.
Layout Inspector
Mit dem Layout Inspector in Android Studio sehen Sie, welche zusammensetzbaren Funktionen in Ihrer App neu erstellen. Hier wird angezeigt, wie oft die Funktion „Schreiben“ neu zusammengesetzt oder übersprungen.
Compiler-Berichte erstellen
Der Compose-Compiler kann die Ergebnisse seiner Stabilitätsinferenz für Inspektion. Anhand dieser Ausgabe können Sie bestimmen, welche Ihrer zusammensetzbaren Funktionen überspringbar und welche nicht. In den folgenden Unterabschnitten wird die Verwendung dieser Funktionen zusammengefasst: Ausführlichere Informationen finden Sie in den technischen Dokumentation.
Einrichten
Das Erstellen von Compiler-Berichten ist standardmäßig nicht aktiviert. Sie können sie mit
Compiler-Flag. Die genaue Einrichtung hängt davon ab,
Projekt erstellen. Für Projekte mit dem Composer-Plug-in für Gradle können Sie Folgendes tun:
Fügen Sie in jeder build.gradle
-Datei der Module Folgendes hinzu.
android { ... }
composeCompiler {
reportsDestination = layout.buildDirectory.dir("compose_compiler")
metricsDestination = layout.buildDirectory.dir("compose_compiler")
}
Die Funktion „Compiler-Berichte“ wird jetzt beim Erstellen deines Projekts generiert.
Beispielausgabe:
reportsDestination
gibt drei Dateien aus. Hier einige Beispiele für Ausgaben
von JetSnack
<modulename>-classes.txt
:Ein Bericht zur Stabilität der Klassen in diesem -Modul. Beispiel:<modulename>-composables.txt
:Ein Bericht dazu, wie neustartfähig und Überspringbar sind die zusammensetzbaren Funktionen im Modul. Beispiel:<modulename>-composables.csv
:CSV
-Version des Berichts zu zusammensetzbaren Funktionen die Sie in eine Tabellenkalkulation importieren oder mit einem Skript verarbeiten können. Beispiel
Bericht „Zusammensetzbare Elemente“
In der Datei composables.txt
sind alle zusammensetzbaren Funktionen für die angegebene
des Moduls, einschließlich der Stabilität der Parameter,
neustartbar oder überspringbar sind. Hier sehen Sie ein hypothetisches Beispiel
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
)
Diese SnackCollection
-Zusammensetzbare Funktion ist vollständig neustartfähig, überspringbar und
stabil sein. Dies ist im Allgemeinen vorzuziehen, aber nicht zwingend erforderlich.
Betrachten wir andererseits ein weiteres Beispiel.
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
)
Die zusammensetzbare Funktion „HighlightedSnacks
“ kann nicht übersprungen werden. Beim Schreiben wird der Text nie übersprungen
bei der Neuzusammensetzung. Dies geschieht auch dann, wenn sich keiner der Parameter geändert hat.
Der Grund dafür ist der unstable
-Parameter snacks
.
Bericht „Kurse“
Die Datei classes.txt
enthält einen ähnlichen Bericht über die Klassen im gegebenen
-Modul. Das folgende Snippet ist die Ausgabe für die Klasse Snack
:
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
}
Hier ist die Definition von Snack
:
data class Snack(
val id: Long,
val name: String,
val imageUrl: String,
val price: Long,
val tagline: String = "",
val tags: Set<String> = emptySet()
)
Der Compiler Compose hat Snack
als instabil markiert. Das liegt daran, dass die Art der
Der tags
-Parameter ist Set<String>
. Dies ist ein unveränderlicher Typ,
ist kein MutableSet
. Standardsammlungsklassen wie Set, List
,
und Map
sind letztendlich Schnittstellen. Daher kann die zugrunde liegende Implementierung
immer noch änderbar sein.
Sie könnten beispielsweise val set: Set<String> = mutableSetOf("foo")
schreiben. Die
konstant und ihr deklarierter Typ ist nicht veränderbar,
-Implementierung weiterhin veränderbar ist. Der Compose-Compiler kann nicht sicher sein,
unveränderlich ist, da sie nur den deklarierten Typ sieht. Daher markiert sie
tags
als instabil.