Erstellungsphasen und Leistung
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Wenn die Funktion „Compose“ einen Frame aktualisiert, durchläuft dies drei Phasen:
- Komposition:Mit der Option „Schreiben“ wird festgelegt, was angezeigt wird. Er führt zusammensetzbare Funktionen aus und erstellt den UI-Baum.
- Layout:Mit der Funktion „Compose“ werden Größe und Position der einzelnen Elemente in der UI-Baumstruktur festgelegt.
- Zeichnung:Beim Erstellen werden die einzelnen UI-Elemente tatsächlich rendert.
Bei der Funktion „Compose“ können nicht benötigte Phasen intelligent übersprungen werden. Angenommen, ein einzelnes Grafikelement 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 bei der Erstellung die Zusammensetzungs- und Layoutphase übersprungen und dieses eine Element neu gezeichnet werden.
Aufgrund von Codierungsfehlern kann Compose jedoch schwer erkennen, welche Phasen sicher übersprungen werden können. In diesem Fall werden alle drei Phasen ausgeführt, was Ihre UI verlangsamen kann. Viele der Best Practices für die Leistungsfähigkeit sollen dabei helfen, die nicht erforderlichen Phasen zu überspringen.
Weitere Informationen finden Sie im Leitfaden zu den Jetpack Compose Phases.
Allgemeine Prinzipien
Es gibt einige allgemeine Prinzipien, die die Leistung im Allgemeinen verbessern können:
- Verschieben Sie Berechnungen nach Möglichkeit aus Ihren zusammensetzbaren Funktionen.
Zusammensetzbare Funktionen müssen möglicherweise bei Änderungen an der Benutzeroberfläche noch einmal ausgeführt werden. Jeder Code, den Sie in die zusammensetzbare Funktion einfügen, wird erneut ausgeführt, möglicherweise für jeden Frame einer Animation. Beschränken Sie den Code der zusammensetzbaren Funktion auf das, was zum Erstellen der UI erforderlich ist.
- Steigen Sie Statuslesevorgänge so lange wie möglich aus. Wenn Sie die Statuslesefunktion in eine untergeordnete zusammensetzbare Phase oder eine spätere Phase verschieben, können Sie die Neuzusammensetzung minimieren oder die Zusammensetzungsphase vollständig überspringen. Dazu können Sie Lambda-Funktionen anstelle des Statuswerts für sich häufig ändernde Status übergeben und Lambda-basierte Modifikatoren verwenden, wenn Sie einen sich häufig ändernden Status übergeben. Ein Beispiel für dieses Verfahren finden Sie unter Best Practices anwenden im Abschnitt Lesevorgänge so lange wie möglich aufschieben.
Weitere Ressourcen
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-27 (UTC)."],[],[],null,["# Compose phases and performance\n\nWhen Compose updates a frame, it goes through three phases:\n\n- **Composition:** Compose determines *what* to show. It runs composable functions and builds the UI tree.\n- **Layout:** Compose determines the size and placement of each element in the UI tree.\n- **Drawing:** Compose actually *renders* the individual UI elements.\n\nCompose can intelligently skip any of those phases if they aren't needed. For\nexample, suppose a single graphic element swaps between two icons of the same\nsize. Since this element isn't changing size, and no elements of the UI tree are\nbeing added or removed, Compose can skip over the composition and layout phases\nand redraw this one element.\n\nHowever, coding mistakes can make it hard for Compose to know which phases it\ncan safely skip, in which case Compose runs all three phases, which can slow\ndown your UI. So, many of the performance best practices are to help Compose\nskip the phases it doesn't need to do.\n\nFor more information, see the [Jetpack Compose Phases](/develop/ui/compose/phases) guide.\n\nGeneral principles\n------------------\n\nThere are a couple of broad principles to follow that can improve performance in\ngeneral:\n\n- **Whenever possible, move calculations out of your composable functions.** Composable functions might need to be rerun whenever the UI changes. Any code you put in the composable gets re-executed, potentially for every frame of an animation. Limit the composable's code to only what it needs to build the UI.\n- **Defer state reads for as long as possible.** By moving state reading to a child composable or a later phase, you can minimize recomposition or skip the composition phase entirely. You can do this by passing lambda functions instead of the state value for frequently changing state and by preferring lambda-based modifiers when you pass in frequently changing state. You can see an example of this technique in the [Defer reads as long as possible](/develop/ui/compose/performance/bestpractices#defer-reads) section of [Follow best practices](/develop/ui/compose/performance/bestpractices).\n\nAdditional Resources\n--------------------\n\n- **[App performance guide](/topic/performance/overview)**: Discover best practices, libraries, and tools to improve performance on Android.\n- **[Inspect Performance](/topic/performance/inspecting-overview):** Inspect app performance.\n- **[Benchmarking](/topic/performance/benchmarking/benchmarking-overview):** Benchmark app performance.\n- **[App startup](/topic/performance/appstartup/analysis-optimization):** Optimize app startup.\n- **[Baseline profiles](/baseline-profiles):** Understand baseline profiles."]]