Erstellungsphasen und Leistung

Wenn Compose einen Frame aktualisiert, durchläuft es drei Phasen:

  • Zusammensetzung:Mit „Compose“ wird festgelegt, was angezeigt werden soll. Sie führt zusammensetzbare Funktionen aus und erstellt den UI-Baum.
  • Layout:Compose bestimmt die Größe und Platzierung der einzelnen Elemente im UI-Baum.
  • Zeichnen:Mit „Compose“ werden die einzelnen UI-Elemente tatsächlich gerendert.

Compose kann diese Phasen intelligent überspringen, wenn sie nicht erforderlich sind. Angenommen, ein einzelnes grafisches Element wechselt zwischen zwei Symbolen derselben Größe. Da sich die Größe dieses Elements nicht ändert und keine Elemente des UI-Baums hinzugefügt oder entfernt werden, kann Compose die Phasen „Zusammensetzung“ und „Layout“ überspringen und dieses eine Element neu zeichnen.

Durch Programmierfehler kann es jedoch schwierig für Compose sein, zu erkennen, welche Phasen sicher übersprungen werden können. In diesem Fall werden alle drei Phasen ausgeführt, was die Benutzeroberfläche verlangsamen kann. Viele der Best Practices zur Leistungsoptimierung sollen Compose helfen, Phasen zu überspringen, die nicht erforderlich sind.

Weitere Informationen finden Sie im Leitfaden Jetpack Compose-Phasen.

Allgemeine Grundsätze

Es gibt einige allgemeine Grundsätze, die Sie befolgen können, um die Leistung im Allgemeinen zu verbessern:

  • Lagern Sie Berechnungen nach Möglichkeit aus Ihren zusammensetzbaren Funktionen aus. Composable-Funktionen müssen möglicherweise neu ausgeführt werden, wenn sich die Benutzeroberfläche ändert. Jeder Code, den Sie in die Composable-Funktion einfügen, wird neu ausgeführt, möglicherweise für jeden Frame einer Animation. Beschränken Sie den Code der Composable-Funktion auf das, was zum Erstellen der Benutzeroberfläche erforderlich ist.
  • Statuslesevorgänge so lange wie möglich aufschieben: Wenn Sie das Lesen des Status in eine untergeordnete Composable-Funktion oder eine spätere Phase verschieben, können Sie die Neukomposition minimieren oder die Kompositionsphase ganz überspringen. Dazu können Sie Lambda-Funktionen anstelle des Statuswerts für häufig geänderte Status übergeben und Lambda-basierte Modifikatoren bevorzugen, wenn Sie häufig geänderte Status übergeben. Ein Beispiel für diese Technik finden Sie im Abschnitt Lesevorgänge so lange wie möglich aufschieben unter Best Practices.

Zusätzliche Ressourcen