Risolvere i problemi di prestazioni comuni

Per offrire un'esperienza app fluida, stabile ed efficiente in termini di batteria, è necessario identificare e risolvere i colli di bottiglia comuni delle prestazioni in termini di stabilità, rendering dell'interfaccia utente, consumo di memoria, lavoro in background, latenza di avvio e ottimizzazione della build.

Le guide in questa sezione spiegano il comportamento della piattaforma Android sottostante per ogni tipo di problema e descrivono come diagnosticarli, profilarli e risolverli utilizzando strumenti come Android Studio Profiler, Perfetto, Logcat e ApplicationExitInfo.

Stabilità

  • ANR: diagnostica e correzione degli errori di tipo L'applicazione non risponde (ANR) causati da thread dell'interfaccia utente bloccati, I/O del thread principale, contesa di blocchi o ricevitori di trasmissione lenti.
  • Arresti anomali: leggi le analisi dello stack, esamina l'output di Logcat e previeni eccezioni non gestite e segnali nativi.

Rendering e avvio

  • Rendering lento: identifica e correggi i frame dell'interfaccia utente eliminati o bloccati (>16ms e >700ms) causati da layout costosi, passaggi di binding o blocchi del thread principale.
  • Sessioni lente (solo giochi): Misura la spaziatura dei frame con SurfaceFlinger e ottimizza le frequenze frame dei giochi utilizzando Android Frame Pacing (Swappy), Vulkan e Android Dynamic Performance Framework (ADPF).
  • Tempi di avvio dell'app: comprendi i dettagli interni dell'avvio a freddo, caldo e caldo, misura il tempo di attesa per la prima schermata (TTID) e il tempo di attesa per la schermata completa (TTFD) e ottimizza il lavoro di avvio.

Gestione della memoria

  • Low Memory Killers (LMK): scopri come il daemon Low Memory Killer (lmkd) di Android assegna la priorità ai processi tramite oom_adj_score e profila il footprint della memoria in Android Studio, Unity e Unreal Engine.
  • Memoria utilizzata (RSS anonimo + swap): Misura e riduci l'impronta della memoria RSS (Resident Set Size) anonima e swap della tua app negli stati in primo piano, di servizio e in background.
  • Memoria utilizzata dalle bitmap: Diagnostica le allocazioni di bitmap sovradimensionate o con perdite e rilascia i buffer grafici quando i componenti dell'interfaccia utente passano in background.

Batteria e attività in background

Autorizzazioni e ottimizzazione della build

  • Negazione delle autorizzazioni: richiedi le autorizzazioni di runtime nel contesto e spiega chiaramente agli utenti la logica delle autorizzazioni.
  • Ottimizzazione del codice DEX: Configura le regole di riduzione, offuscamento e ottimizzazione di R8 per ridurre le dimensioni del file DEX e migliorare le prestazioni di runtime.