Novità sul prodotto

Preparazione dell'app per limiti di memoria più ampi

Tempo di lettura: 2 minuti
Visualizza il profilo di Blair Harmon
Blair Harmon Director of Product Management, Android Platform

Un'esperienza utente ottimale è fondamentale per la missione di Android e per mantenere la promessa di offrire dispositivi veloci, reattivi e affidabili. Ecco perché l'ottimizzazione della memoria è più importante che mai. In tutto l'ecosistema, i nuovi dispositivi mantengono o addirittura riducono la capacità di memoria fisica in risposta agli aumenti di prezzo della memoria, ma gli utenti continuano ad aspettarsi la stessa esperienza fluida e ad alte prestazioni delle app.

In Android 17, abbiamo introdotto limiti di memoria per app, a partire dai dispositivi Pixel, per contribuire a proteggere l'esperienza utente complessiva dalle applicazioni che utilizzano memoria in eccesso e causano rallentamenti a livello di sistema. Nel corso del prossimo anno, un numero crescente di produttori sfrutterà i limiti di memoria per app di Android nel proprio portafoglio di configurazioni di RAM dei dispositivi, dai dispositivi con 4 GB a quelli con 16 GB e oltre. Se la tua app supera questi limiti, verrà rallentata e potrebbe essere terminata. L'ottimizzazione del footprint della memoria dell'app è essenziale per evitare la limitazione del sistema operativo e mantenere un'esperienza utente fluida.  

In questo post, esamineremo come funzionano questi limiti, come misurare il footprint della memoria utilizzando le nuove metriche Android vitals e i passaggi pratici per ottimizzare la tua app o il tuo gioco.

Informazioni sui limiti di memoria 

Quando la tua app supera il budget di memoria, Android adotta misure progressive per proteggere la reattività del dispositivo:

  1. Scambio zRAM: se la tua app raggiunge il limite allocato, il sistema forza le pagine dell'app in zRAM (RAM compressa). Sebbene zRAM impedisca l'espulsione immediata, la compressione e la decompressione delle pagine aggiungono un sovraccarico della CPU, che può causare un evidente rallentamento dell'esperienza utente.
  2. Terminazione del processo: se l'app continua ad aumentare la memoria utilizzata oltre la soglia di zRAM, verrà terminata dal sistema.  Per determinare se la sessione dell'app è stata interessata da questi vincoli sul campo, puoi chiamare getDescription() entro ApplicationExitInfo. Se il sistema ha applicato un limite, il motivo dell'uscita viene segnalato come REASON_OTHER e la stringa di descrizione conterrà "MemoryLimiter:AnonSwap". Puoi anche sfruttare la profilazione basata su trigger utilizzando TRIGGER_TYPE_ANOMALY per acquisire automaticamente i dump dell'heap quando viene raggiunto il limite di memoria.  

Per scoprire di più sui limiti di memoria per app e sull'applicazione del sistema, consulta la documentazione sui limiti di memoria delle app di Android 17. Per testare l'applicazione su diverse configurazioni del dispositivo, utilizza i comandi adb Memory Limiter. 

Monitoraggio e diagnosi dei problemi di memoria

Non puoi ottimizzare ciò che non puoi misurare. L'identificazione di perdite di memoria, allocazioni heap eccessive e arresti anomali per memoria insufficiente (OOM) nell'ecosistema Android richiede l'utilizzo di strumenti di monitoraggio complementari:

  • Stato a livello macro con Android vitals:per una visibilità ampia a livello di popolazione senza sovraccarico aggiuntivo, Android vitals di Google Play Console fornisce metriche essenziali come Memoria utilizzata (RSS anonimo + swap) e Memoria utilizzata dalla bitmap. In questo modo, puoi avere un'istantanea chiara della distribuzione della memoria nei diversi stati del processo (in primo piano, in background, servizi percepiti dall'utente e memorizzati nella cache) e negli intervalli di classi RAM, il che ti aiuta a individuare i valori anomali della memoria.
  • Uscite di Memory Limiter e monitoraggio degli errori OutOfMemory con Firebase Crashlytics:per rimanere informato sul grave degrado della memoria prima che influisca sulle tue metriche chiave, Crashlytics versione 20.1.0 introduce dati di debug aggiuntivi per aiutarti a rilevare, dare la priorità e correggere le eccezioni OutOfMemory e le interruzioni di Memory Limiter. Il monitoraggio di questi eventi insieme ai log personalizzati e ai metadati coppia chiave-valore ti fornisce un contesto immediato sullo stato del processo quando si verifica un errore di memoria.
  • Tracce sul campo con ProfilingManager:per i team in grado di gestire un framework di osservabilità delle prestazioni, l'API ProfilingManager introdotta in Android 15 (livello API 35) consente alla tua app di richiedere e raccogliere in modo programmatico artefatti di debug della memoria dettagliati, come dump dell'heap Java e profili dell'heap, direttamente dai dispositivi di produzione. Puoi anche attivare l'acquisizione di dump dell'heap in base a indicatori di sistema specifici, ad esempio TRIGGER_TYPE_OOM e TRIGGER_TYPE_ANOMALY. 

Per saperne di più su altre tecniche di monitoraggio della memoria, leggi la nostra documentazione.

Riepilogo e prossimi passi

Con l'ampliamento dei limiti di memoria per app in tutte le classi di RAM, è il momento di controllare il footprint della memoria:

  1. Dai la priorità alle ottimizzazioni della memoria: impedisci che la tua app sia interessata dai limiti di memoria delle app utilizzando le best practice. 
  2. Monitora l'utilizzo della memoria: monitora il comportamento della memoria della tua app per rilevare e risolvere comportamenti anomali.  
  3. Ottimizza il gioco: segui le indicazioni più recenti per i giochi e le app multimediali complesse per massimizzare il risparmio di memoria negli stati di elaborazione.

Risorse e riferimenti utili

Scritto da:
Continua a leggere