Acquisire un dump dell'heap (visualizzazioni)

Implementazione di Jetpack Compose

Questa pagina include informazioni su come trovare e attivare perdite di memoria specifiche per i layout basati su View. Per le informazioni di base sull'acquisizione e l'analisi dei dump dell'heap, vedi Acquisire un dump dell'heap.

Trovare perdite di memoria

Per filtrare rapidamente i corsi che potrebbero essere associati a perdite di memoria, apri il menu a discesa dei corsi e seleziona Mostra perdite di attività/frammenti. Android Studio mostra le classi che ritiene indichino perdite di memoria per le istanze Activity e Fragment nella tua app. I tipi di dati mostrati dal filtro includono quanto segue:

  • Istanze Activity che sono state eliminate ma a cui viene ancora fatto riferimento.
  • Istanze Fragment che non hanno un FragmentManager valido, ma a cui viene comunque fatto riferimento.

Tieni presente che il filtro potrebbe generare falsi positivi nelle seguenti situazioni:

  • Viene creato un Fragment, ma non è ancora stato utilizzato.
  • Un Fragment viene memorizzato nella cache, ma non come parte di un FragmentTransaction.

Per cercare perdite di memoria in modo più manuale, sfoglia gli elenchi di classi e istanze per trovare oggetti con un valore elevato di Dimensioni mantenute. Cerca perdite di memoria causate da uno dei seguenti elementi:

  • Riferimenti di lunga durata a Activity, Context, View, Drawable e altri oggetti che potrebbero contenere un riferimento al contenitore Activity o Context.
  • Classi interne non statiche, ad esempio un Runnable, che possono contenere un'istanza Activity.
  • Cache che conservano gli oggetti più a lungo del necessario.

Quando trovi potenziali perdite di memoria, utilizza le schede Campi e Riferimenti in Dettagli istanza per passare all'istanza o alla riga di codice sorgente di interesse.

Attivare perdite di memoria per i test

Per provocare perdite di memoria da testare nella tua app, puoi attivarle in uno dei seguenti modi:

  • Ruota il dispositivo dalla modalità verticale a quella orizzontale e viceversa più volte in diversi stati di attività. La rotazione del dispositivo può spesso causare la perdita di un oggetto Activity, Context o View da parte di un'app perché il sistema ricrea l'Activity e, se la tua app contiene un riferimento a uno di questi oggetti altrove, il sistema non può raccoglierlo.
  • Passare da un'app a un'altra in diversi stati di attività. Ad esempio, vai alla schermata Home, quindi torna all'app.