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) 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 memoriamonitora 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