Istruzioni

Guida ai livelli per il tuo percorso di rendimento

Lettura di 9 minuti
Alice Yuan
Developer Relations Engineer

Guida ai livelli per il tuo percorso di rendimento

Ti diamo il benvenuto al quarto giorno della settimana dedicata alle prestazioni. Ora che hai scoperto alcuni degli straordinari strumenti e delle best practice che abbiamo introdotto di recente, come l'ottimizzatore R8 e l'ottimizzazione guidata dal profilo con i profili di baseline e i profili di avvio, ti starai chiedendo da dove iniziare il tuo percorso di miglioramento delle prestazioni. 

Abbiamo creato una guida passo passo per il livellamento delle prestazioni per venire incontro al tuo team di sviluppo mobile, che tu sia un'app con un solo sviluppatore che vuole iniziare a lavorare sulle prestazioni o che tu abbia un intero team dedicato al miglioramento delle prestazioni di Android. 

La guida al livellamento delle prestazioni è suddivisa in 5 livelli. Inizieremo con il livello 1, che introduce strumenti di misurazione delle prestazioni con uno sforzo di adozione minimo, e arriveremo al livello 5, ideale per le app che dispongono delle risorse per mantenere un framework delle prestazioni personalizzato.

 
Puoi passare direttamente al livello che ti interessa di più:

Livello 1:  utilizza il monitoraggio dei campi fornito da Play Console

Ti consigliamo di utilizzare prima Android vitals in Play Console per visualizzare i dati di monitoraggio sul campo raccolti automaticamente, in modo da ottenere informazioni sulla tua applicazione con il minimo sforzo.

Android vitals è l'iniziativa di Google per raccogliere e mostrare automaticamente i dati di questo campo.

Ecco una spiegazione di come forniamo questi dati:

  1. Raccolta dei dati : quando un utente attiva questa opzione, il suo dispositivo Android registra automaticamente gli eventi chiave di prestazioni e stabilità di tutte le app, inclusa la tua.
  2. Dati aggregati:Google Play raccoglie e anonimizza questi dati dagli utenti della tua app.
  3. Statistiche sulla superficie:i dati vengono presentati nella dashboard Android vitals in Google Play Console.

La dashboard Android vitals monitora molte metriche, ma alcune sono designate come Core Vitals. Queste sono le più importanti perché possono influire sulla visibilità e sul ranking della tua app sul Google Play Store.

Metriche vitals essenziali

METRICHE TECNICHE PRINCIPALI DI QUALITÀ DI GOOGLE PLAY

Per massimizzare la visibilità su Google Play, mantieni la tua app al di sotto delle soglie relative alle prestazioni scadenti per queste metriche.

Percentuale di arresti anomali percepiti dagli utentiLa percentuale di utenti attivi giornalieri che hanno riscontrato almeno un arresto anomalo che probabilmente è stato notato
Percentuale di errori ANR percepiti dall'utenteLa percentuale di utenti attivi giornalieri che hanno riscontrato almeno un errore ANR che probabilmente è stato notato
Utilizzo della batteria eccessivoLa percentuale di sessioni di quadrante in cui l'utilizzo della batteria supera il 4,44% all'ora
Novità: wakelock parziali eccessiviLa percentuale di sessioni utente in cui l'utilizzo cumulativo del wakelock non esente supera le 2 ore

Le metriche vitals essenziali includono la percentuale di arresti anomali percepiti dagli utenti, la percentuale di ANR, l'utilizzo eccessivo della batteria e la metrica appena introdotta sui wakelock parziali eccessivi.

Percentuale di ANR percepiti dagli utenti

Puoi utilizzare la dashboard ANR di Android vitals per visualizzare le analisi dello stack dei problemi che si verificano sul campo e ricevere approfondimenti e consigli su come risolverli. 

crashesAnrs.png

Puoi visualizzare in dettaglio un ANR specifico che si è verificato per visualizzare l'analisi dello stack e approfondimenti su cosa potrebbe causare il problema.

insights.png

Consulta anche le nostre indicazioni sugli errori ANR per diagnosticare e risolvere gli scenari comuni in cui potrebbero verificarsi errori ANR. 

Percentuale di arresti anomali percepiti dagli utenti 

Utilizza la dashboard degli arresti anomali di Android vitals per eseguire il debug degli arresti anomali e visualizzare un campione di analisi dello stack che si verificano all'interno dell'app. 

La nostra documentazione fornisce anche indicazioni per la risoluzione dei problemi relativi a arresti anomali specifici. Ad esempio, la guida alla risoluzione dei problemi relativi ai servizi in primo piano descrive i modi per identificare e correggere gli scenari comuni in cui si verificano arresti anomali.

Utilizzo eccessivo della batteria 

Per ridurre le sessioni del quadrante con un utilizzo eccessivo della batteria su Wear OS, consulta la guida di Wear su come migliorare e risparmiare la batteria

[Novità] Wakelock parziali eccessivi

 

Di recente abbiamo annunciato che le app che superano la soglia di wakelock parziali eccessivi potrebbero essere trattate in modo diverso a partire dal 1° marzo 2026

Per i dispositivi mobili, la metrica Android vitals si applica ai wakelock non esenti acquisiti mentre lo schermo è spento e l'app è in background o esegue un servizio in primo piano. Android vitals considera eccessivo l'utilizzo dei wakelock parziali se questi vengono mantenuti per almeno due ore in un periodo di 24 ore e se interessano più del 5% delle sessioni della tua app, in media su 28 giorni.

Per eseguire il debug e risolvere i problemi di wakelock eccessivo, consulta il nostro post del blog tecnico.

Consulta la nostra documentazione di Android vitals e continua il tuo percorso per sfruttare al meglio Android vitals.

Livello 2: segui le attività del punteggio del rendimento dell'app

Poi, passa all'utilizzo del punteggio di rendimento dell'app per trovare le azioni ad alto impatto per migliorare il rendimento dell'app.

Il punteggio delle prestazioni dell'app per Android è un framework standardizzato per misurare le prestazioni tecniche della tua app. Il punteggio va da 0 a 100, dove un numero più basso indica maggiori margini di miglioramento.

Per ottenere risultati facili, devi iniziare con il punteggio di rendimento statico. Si tratta spesso di modifiche alla configurazione o aggiornamenti degli strumenti che offrono un notevole aumento delle prestazioni.

Passaggio 1: esegui la valutazione statica

La valutazione statica valuta la configurazione e l'adozione degli strumenti del progetto. Questi sono spesso i modi più rapidi per migliorare le prestazioni.

Vai alla sezione Punteggio statico della pagina della classifica e segui questi passaggi:

  1. Valuta la versione del plug-in Android per Gradle (AGP).
  2. Adotta la riduzione R8 in modo incrementale o, idealmente, utilizza R8 in modalità completa per ridurre e ottimizzare il codice dell'app.
  3. Adotta i profili Baseline, che migliorano la velocità di esecuzione del codice dal primo avvio, fornendo miglioramenti delle prestazioni per ogni nuova installazione e ogni aggiornamento dell'app.
  4. Adotta i profili di avvio per migliorare il layout DEX. I profili di avvio vengono utilizzati dal sistema di compilazione per ottimizzare ulteriormente le classi e i metodi che contengono migliorando il layout del codice nei file DEX dell'APK.
  5. Esegui l'upgrade all'ultima versione di Jetpack Compose

Passaggio 2: esegui la valutazione dinamica

Dopo aver applicato le correzioni statiche, utilizza la valutazione dinamica per convalidare i miglioramenti su un dispositivo reale. Puoi farlo manualmente con un dispositivo fisico e un cronometro.

Vai alla sezione Punteggio dinamico della pagina della classifica e segui questi passaggi:

  1. Configura l'ambiente di test con un dispositivo fisico. Valuta la possibilità di utilizzare un dispositivo di fascia bassa per esagerare i problemi di prestazioni, in modo da individuarli più facilmente.
  2. Misura il tempo di avvio da Avvio app. Avvia a freddo l'app dall'icona in Avvio applicazioni e misura il tempo necessario per renderla interattiva.
  3. Misura il tempo di avvio dell'app da una notifica, con l'obiettivo di ridurre il tempo di avvio delle notifiche a meno di un paio di secondi.
  4. Misura le prestazioni di rendering scorrendo le schermate e le animazioni principali.

Una volta completati questi passaggi, riceverai un punteggio compreso tra 1 e 100 per i punteggi statici e dinamici, che ti consentirà di comprendere il rendimento della tua app e su cosa concentrarti.

Livello 3: sfruttare i framework di test delle prestazioni locali

Una volta iniziato a valutare il rendimento dinamico, potresti trovare troppo noioso misurare il rendimento manualmente. Valuta la possibilità di automatizzare i test delle prestazioni utilizzando framework di test delle prestazioni come Macrobenchmark e UiAutomator.

Macrobenchmark 💚 UiAutomator

Considera Macrobenchmark e UiAutomator come due strumenti che funzionano insieme: Macrobenchmark è lo strumento di misurazione. È come un cronometro e un contatore di frame rate che viene eseguito al di fuori dell'app. È responsabile dell'avvio dell'app, della registrazione delle metriche (come il tempo di avvio o i frame persi) e dell'arresto dell'app. UiAutomator è l'utente robot. La libreria ti consente di scrivere codice per interagire con lo schermo del dispositivo. Può trovare un'icona, toccare un pulsante,  scorrere un elenco e altro ancora.

Come scrivere un test

Quando scrivi un test, racchiudi il codice UiAutomator all'interno di un blocco Macrobenchmark.

  1. Definisci il test:utilizza @MacrobenchmarkRule
  2. Inizia la misurazione:chiama benchmarkRule.measureRepeated.
  3. Controlla la UI:all'interno di questo blocco, utilizza il codice UiAutomator per avviare l'app, trovare gli elementi della UI e interagire con loro.

Ecco un esempio di snippet di codice che mostra come testare un elenco di composizione per il jank di scorrimento.

  benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

4. Esamina i risultati: ogni esecuzione del test fornisce informazioni misurate con precisione per offrirti i dati migliori sul rendimento della tua app.

  timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

Casi d'uso comuni

Macrobenchmark fornisce diverse metriche principali pronte all'uso. StartupTimingMetric ti consente di misurare con precisione l'avvio dell'app. Il FrameTimingMetric ti consente di comprendere il rendimento del rendering di un'app durante il test.

Abbiamo una guida dettagliata e completa all'utilizzo di Macrobenchmark e UiAutomator insieme a esempi di codice disponibili per continuare a imparare.

Livello 4: utilizza strumenti di analisi delle tracce come Perfetto 

Gli strumenti di analisi delle tracce come Perfetto vengono utilizzati quando devi andare oltre il codice dell'applicazione. A differenza dei debugger o dei profiler standard che vedono solo il tuo processo, Perfetto acquisisce l'intero stato del dispositivo, la pianificazione del kernel, la frequenza della CPU, altri processi e servizi di sistema, fornendoti un contesto completo per i problemi di prestazioni.

Consulta la nostra playlist di YouTube sul debug delle prestazioni per istruzioni video sul debug delle prestazioni utilizzando le tracce di sistema, Android Studio Profiler e Perfetto.

Come utilizzare Perfetto per eseguire il debug delle prestazioni

Il flusso di lavoro generale per il debug delle prestazioni utilizzando gli strumenti di analisi delle tracce consiste nel registrare, caricare e analizzare la traccia. 

Passaggio 1: registra una traccia

Puoi registrare una traccia di sistema utilizzando diversi metodi: 

Passaggio 2: carica la traccia

Una volta ottenuto il file di traccia, devi caricarlo nello strumento di analisi.

  1. Apri Chrome e vai a ui.perfetto.dev.
  2. Trascina il file .perfetto-trace (o .pftrace) direttamente nella finestra del browser.
  3. L'interfaccia utente elaborerà il file e visualizzerà la sequenza temporale.

Passaggio 3: analizza la traccia

Puoi utilizzare l'interfaccia utente di Perfetto o Android Studio Profiler per analizzare i problemi di prestazioni. Guarda questo episodio della serie Abilità MAD su Performance, in cui la nostra ingegnere delle prestazioni Carmen Jackson parla di Perfetto traceviewer.

Scenari per l'ispezione delle tracce di sistema utilizzando Perfetto

Perfetto è uno strumento per esperti e può fornire informazioni su tutto ciò che è accaduto sul dispositivo Android durante l'acquisizione di una traccia. Ciò è particolarmente utile quando non riesci a identificare la causa principale di un rallentamento utilizzando i log standard o i profiler di base.

Debug di Jank (frame persi)

Se la tua app presenta problemi di scorrimento, Perfetto può mostrarti esattamente perché un frame specifico non ha rispettato la scadenza.

Se il problema è dovuto all'app, potresti notare che il thread principale è in esecuzione per un lungo periodo di tempo e sta eseguendo un'analisi complessa. Questo indica scenari in cui devi spostare il lavoro nell'elaborazione asincrona.

Se il problema è dovuto al sistema, potresti vedere il thread principale pronto per l'esecuzione, ma lo scheduler del kernel della CPU ha dato la priorità a un servizio di sistema diverso, lasciando la tua app in attesa (contesa della CPU). Ciò indica scenari in cui potrebbe essere necessario ottimizzare l'utilizzo delle API della piattaforma.

Analisi dell'avvio lento dell'app

L'avvio è complesso e comporta l'inizializzazione del sistema, la creazione di fork dei processi e il caricamento delle risorse. Perfetto visualizza questa sequenza temporale in modo preciso.

Puoi vedere se stai aspettando chiamate Binder (comunicazione interprocesso). Se il tuo onCreate attende a lungo una risposta dal sistema PackageManager, Perfetto mostrerà chiaramente lo stato bloccato. 

Puoi anche vedere se la tua app esegue più lavoro del necessario durante l'avvio. Ad esempio, se crei e disponi più viste di quelle che l'app deve mostrare, puoi visualizzare queste operazioni nella traccia.

Indagine sul consumo eccessivo della batteria e sull'utilizzo della CPU

Poiché Perfetto vede l'intero sistema, è perfetto per trovare consumi energetici invisibili.

Puoi identificare quali processi mantengono i wake lock, impedendo al dispositivo di entrare in modalità sospensione, nelle tracce "Stato del dispositivo". Scopri di più nel nostro post del blog sui wake lock. Inoltre, utilizza Perfetto per verificare se i job in background vengono eseguiti troppo spesso o riattivano la CPU inutilmente.

Livello 5: crea il tuo framework di monitoraggio del rendimento

L'ultimo livello è per le app con team che dispongono delle risorse per mantenere un framework di monitoraggio del rendimento. 

La creazione di un framework personalizzato di monitoraggio del rendimento su Android prevede l'utilizzo di diverse API di sistema per acquisire dati durante l'intero ciclo di vita dell'applicazione, dall'avvio all'uscita, e durante scenari specifici di carico elevato.

Utilizzando ApplicationStartInfo, ProfilingManager e ApplicationExitInfo, puoi creare un sistema di telemetria solido che fornisca report su come è stata avviata l'app, informazioni dettagliate su cosa ha fatto durante l'esecuzione e sul motivo per cui è terminata.

ApplicationStartInfo: monitoraggio dell'avvio dell'app

Disponibile a partire da Android 15 (API 35), ApplicationStartInfo fornisce metriche dettagliate sull'avvio dell'app sul campo. I dati includono se l'avvio è stato a freddo, a caldo o caldo e la durata delle diverse fasi di avvio. 

In questo modo puoi sviluppare una metrica di avvio di base utilizzando i dati di produzione per ottimizzare ulteriormente ciò che potrebbe essere difficile da riprodurre localmente. Puoi utilizzare queste metriche per eseguire test A/B che ottimizzano il flusso di avvio.

L'obiettivo è registrare con precisione le metriche di avvio senza instrumentare manualmente ogni fase di inizializzazione.

Puoi eseguire query su questi dati in modo differito qualche tempo dopo l'avvio dell'applicazione.

ProfilingManager: acquisizione del motivo della lentezza

ProfilingManager (API 35) consente alla tua app di attivare in modo programmatico le tracce di sistema sui dispositivi degli utenti. Questo è utile per rilevare problemi di prestazioni transitori in produzione che non puoi riprodurre localmente.

L'obiettivo è registrare automaticamente una traccia quando viene rilevato che una Critical User Journey specifica e altamente critica è lenta o presenta problemi di prestazioni.

Puoi registrare un listener che si attiva quando vengono soddisfatte condizioni specifiche o attivarlo manualmente quando rilevi un problema di prestazioni come scatti, memoria eccessiva o consumo eccessivo della batteria.

Consulta la nostra documentazione su come acquisire un profilorecuperare e analizzare i dati di profilazione e utilizzare i comandi di debug.

ApplicationExitInfo: monitoraggio del motivo dell'arresto anomalo dell'app

ApplicationExitInfo (API 30) indica il motivo per cui il processo precedente è terminato. Questo è fondamentale per trovare arresti anomali nativi, ANR o interruzioni del sistema dovute a memoria utilizzata eccessiva (OOM). Potrai anche ottenere una traccia tombstone dettagliata utilizzando l'API getTraceInputStream.

Lo scopo dell'API è comprendere i problemi di stabilità che non attivano i reporter di arresti anomali Java standard (come Low Memory Kills).

Devi attivare questa API al successivo avvio dell'app.

Passaggi successivi

Il miglioramento delle prestazioni di Android è un percorso passo passo. Non vediamo l'ora di scoprire come migliorerai le tue prestazioni utilizzando questi strumenti.

Sintonizzati domani per Ask Android

Hai ridotto le dimensioni dell'app con R8 e ottimizzato il runtime con l'ottimizzazione guidata dal profilo. e misurare il rendimento della tua app.

Unisciti a noi domani per la sessione live Chiedi ad Android. Poni subito le tue domande utilizzando l'hashtag #AskAndroid e ricevi risposte dagli esperti.

Scritto da:

Continua a leggere