Scrittura delle fasi e dell'esecuzione
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Quando Compose aggiorna un frame, questo attraversa tre fasi:
- Composizione:l'opzione Scrittura determina cosa mostrare. Esegue funzioni componibili
e crea la struttura ad albero dell'interfaccia utente.
- Layout: Compose determina le dimensioni e il posizionamento di ogni elemento nell'albero dell'interfaccia utente.
- Disegno: Compose in realtà visualizza i singoli elementi dell'interfaccia utente.
Compose può saltare in modo intelligente tutte queste fasi se non sono necessarie. Ad esempio, supponiamo che un singolo elemento grafico venga scambiato tra due icone delle stesse dimensioni. Poiché le dimensioni di questo elemento non cambiano e non vengono aggiunti o rimossi elementi dell'albero dell'interfaccia utente, Compose può saltare le fasi di composizione e layout e tracciare nuovamente questo elemento.
Tuttavia, a causa di errori di programmazione, Compose ha difficoltà a capire quali fasi può saltare in modo sicuro, nel qual caso Compose esegue tutte e tre le fasi, il che può rallentare la UI. Pertanto, molte delle best practice relative alle prestazioni servono
per aiutare Compose a saltare le fasi inutili.
Per ulteriori informazioni, consulta la guida alle fasi di Jetpack Compose.
Principi generali
Ci sono un paio di principi generali da seguire che possono migliorare le prestazioni in generale:
- Se possibile, sposta i calcoli fuori dalle funzioni componibili.
Potrebbe essere necessario eseguire nuovamente le funzioni componibili ogni volta che l'interfaccia utente cambia. Qualsiasi codice inserito nel componibile viene rieseguito, potenzialmente per ogni frame di un'animazione. Limita il codice del componibile solo a ciò di cui ha bisogno per creare
l'interfaccia utente.
- Rimanda le letture dello stato il più a lungo possibile. Spostando la lettura dello stato in un elemento componibile secondario o in una fase successiva, puoi ridurre al minimo la ricomposizione o saltare completamente la fase di composizione. Puoi farlo passando le funzioni lambda anziché il valore dello stato per cambiare spesso lo stato e preferire i modificatori basati su lambda quando passi a uno stato che cambia spesso. Puoi trovare un esempio di questa tecnica nella sezione Posticipa le letture il più a lungo possibile di Segui le best practice.
Risorse aggiuntive
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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."]]