Best practice per l'ottimizzazione delle app

Le seguenti best practice ti aiutano a ottimizzare la tua app senza sacrificare la qualità.

Utilizza profili di riferimento

I profili di riferimento possono migliorare la velocità di esecuzione del codice del 30% dal primo lancio e rendere più fluide tutte le interazioni degli utenti, ad esempio l'avvio di un'app, la navigazione tra le schermate o lo scorrimento dei contenuti, fin dalla prima esecuzione. Aumentare la velocità e la reattività di un'app porta a un numero maggiore di utenti attivi giornalieri e a un tasso di visite di ritorno medio più elevato.

Utilizza un profilo di avvio

Un profilo di avvio è simile a un profilo di riferimento, ma viene eseguito al momento della compilazione per ottimizzare il layout DEX e velocizzare l'avvio dell'app.

Utilizzare la libreria Avvio app

La libreria Avvio app consente di definire inizializzatori di componenti che condividono un singolo fornitore di contenuti, anziché definire fornitori di contenuti separati per ogni componente da inizializzare. Questo può migliorare notevolmente il tempo di avvio dell'app.

Carica lentamente librerie o disattiva l'inizializzazione automatica

Le app utilizzano molte librerie, alcune delle quali potrebbero essere obbligatorie per l'avvio. Tuttavia, ci possono essere molte librerie in cui l'inizializzazione può essere ritardata fino al completamento del tracciamento del primo frame. Alcune librerie hanno la possibilità di disabilitare l'inizializzazione automatica all'avvio o di avere un'inizializzazione on demand. Utilizza questa opzione per posticipare l'inizializzazione fino a quando non è necessario per migliorare le prestazioni. Ad esempio, puoi utilizzare l'inizializzazione on demand per richiamare WorkManager solo quando il componente è richiesto.

Utilizzare i ViewStub

Una ViewStub è una View, invisibile e di dimensioni zero, che puoi utilizzare per gonfiare pigramente le risorse di layout in fase di runtime. In questo modo puoi ritardare l'aumento artificiale delle visualizzazioni non necessarie all'avvio fino a un momento successivo.

Se utilizzi Jetpack Compose, puoi ottenere un comportamento simile a ViewStub utilizzando lo stato per rimandare il caricamento di alcuni componenti:

var shouldLoad by remember {mutableStateOf(false)}

if (shouldLoad) {
   MyComposable()
}

Carica gli elementi componibili all'interno del blocco condizionale modificando shouldLoad:

LaunchedEffect(Unit) {
   shouldLoad = true
}

Ciò attiva una ricomposizione che include il codice all'interno del blocco condizionale nel primo snippet.

Ottimizzare la schermata iniziale

Le schermate iniziali sono una parte importante dell'avvio di un'app e l'utilizzo di una schermata iniziale ben progettata può contribuire a migliorare l'esperienza generale di avvio dell'app. Android 12 (livello API 31) e versioni successive include una schermata iniziale progettata per migliorare le prestazioni. Per ulteriori informazioni, vedi Schermata iniziale.

Utilizza tipi di immagini scalabili

Consigliamo di utilizzare disegni vettoriali per le immagini. Dove non è possibile, utilizza immagini WebP. WebP è un formato di immagini che offre una compressione superiore senza perdita di dati per le immagini sul Web. Puoi convertire le immagini BMP, JPG, PNG o GIF statiche esistenti in formato WebP utilizzando Android Studio. Per ulteriori informazioni, consulta la sezione Creare immagini WebP.

Inoltre, riduci al minimo il numero e le dimensioni delle immagini caricate durante l'avvio.

Utilizza le API Performance

L'API Performance per la riproduzione di contenuti multimediali è disponibile su Android 12 (livello API 31) e versioni successive. Puoi utilizzare questa API per comprendere le funzionalità dei dispositivi ed eseguire le operazioni di conseguenza.

Dai priorità alle tracce di avvio a freddo

Un avvio a freddo si riferisce a un'app che ricomincia da zero. In altre parole, il processo del sistema non crea ancora il processo dell'app. In genere, l'app si avvia a freddo se la avvii per la prima volta dall'avvio del dispositivo o da quando il sistema ha arrestato forzatamente l'app. Gli avvii a freddo sono molto più lenti perché l'app e il sistema devono eseguire una maggiore quantità di lavoro rispetto ad altri tipi di avvio, ad esempio gli avvii a caldo e a caldo. Il tracciamento del sistema delle startup a freddo ti offre una migliore visibilità sulle prestazioni delle app.