Utilizzo memoria bitmap

Le bitmap sono spesso gli oggetti che consumano più memoria in un'app. Le operazioni di decodifica e scalabilità si trovano spesso nel percorso critico per il rendering dei frame. L'ottimizzazione dell'utilizzo della memoria bitmap migliora notevolmente la reattività dell'interfaccia utente, la durata della batteria e la stabilità complessiva riducendo i problemi di jank, ANR e interruzioni dei processi correlate a errori di memoria insufficiente.

Identificare l'utilizzo elevato della memoria bitmap

Android vitals fornisce metriche sull'impronta della memoria bitmap di un'app aggregando i dati dei dispositivi Android. Per impostazione predefinita, queste metriche vengono calcolate come un riepilogo di 28 giorni dei dati giornalieri. Questi dati aiutano a identificare tendenze e potenziali regressioni nell'efficienza della memoria in diversi tipi e versioni di dispositivi.

Android vitals condivide la memoria utilizzata bitmap della tua app suddivisa in base ai seguenti stati del processo:

  • In primo piano: il processo dell'app è visibile. È previsto che il P99 sia significativamente più alto in primo piano rispetto ad altri stati del processo, ma gli sviluppatori devono esaminare se il rapporto P99/P50 è significativo (ad es. superiore a 3,5 volte), in quanto spesso indica una perdita di memoria bitmap. Puoi identificare questo problema cercando una divergenza tra l'utilizzo tipico (P50) e l'utilizzo anomalo (P99). Mentre il bloat generale degli asset gonfia la memoria in modo uniforme in tutti i percentili, le perdite di memoria si accumulano nel tempo, distorcendo notevolmente i dati finali (P99). Assicurati che le allocazioni di bitmap in primo piano non persistano inutilmente dopo che l'app passa ad altri stati.
  • Servizi percepiti dall'utente: il processo dell'app è in esecuzione in uno stato percepibile. Sono inclusi i servizi in primo piano, i job rapidi e i job di trasferimento di dati avviati dall'utente. Le app non devono conservare allocazioni bitmap in primo piano pesanti durante la transizione a questi stati. Poiché questi servizi sono progettati per attività di lunga durata, la conservazione di asset di grandi dimensioni peggiora l'esperienza utente complessiva e costringe il daemon di interruzione per memoria insufficiente (LMKD) a recuperare memoria terminando i processi a priorità inferiore.
  • In background: l'app sta eseguendo un servizio in background o è stata recentemente messa in background, ma non è ancora memorizzata nella cache. Poiché questo stato del processo è meno importante dei processi in primo piano o percepibili, le app devono rilasciare esplicitamente grandi asset bitmap qui per ridurre la pressione sulla memoria.
  • Memorizzata nella cache: l'app è in uno stato memorizzato nella cache. Questo stato è molto sensibile alla pressione della memoria di sistema, ad esempio LMK. Le app devono ridurre in modo proattivo l'utilizzo della memoria bitmap in questo stato per evitare l'espulsione da parte del sistema operativo.

Fattori che contribuiscono all'utilizzo elevato della memoria bitmap

Nel calcolo potrebbe essere inclusa anche la memoria virtuale mai utilizzata. Se noti un utilizzo della memoria bitmap insolitamente elevato, verifica di non allocare memoria inutilizzata.