Gerar um heap dump (visualizações)

Implementação do Jetpack Compose

Esta página inclui informações sobre como encontrar e acionar vazamentos de memória que são exclusivos de layouts baseados em visualizações. Para informações básicas sobre como capturar e analisar heap dumps, consulte Capturar um heap dump.

Encontrar vazamentos de memória

Para filtrar rapidamente as classes que podem estar associadas a vazamentos de memória, abra o menu suspenso de classes e selecione Mostrar vazamentos de atividade/fragmento. O Android Studio mostra classes que ele considera como vazamentos de memória para instâncias de Activity e Fragment no seu app. Os tipos de dados mostrados pelo filtro incluem o seguinte:

  • Instâncias de Activity que foram destruídas, mas ainda estão sendo referenciadas.
  • Instâncias de Fragment que não têm um FragmentManager válido, mas ainda estão sendo referenciadas.

O filtro pode gerar falsos positivos nas seguintes situações:

  • Um Fragment foi criado, mas ainda não foi usado.
  • Um Fragment está sendo armazenado em cache, mas não como parte de um FragmentTransaction.

Para procurar vazamentos de memória de forma mais manual, navegue pelas listas de classes e instâncias para encontrar objetos com um Tamanho retido grande. Procure vazamentos de memória causados por:

  • Referências prolongadas a Activity, Context, View, Drawable e outros objetos que podem manter uma referência ao contêiner Activity ou Context.
  • Classes internas não estáticas, como um Runnable, que podem conter uma instância Activity.
  • Caches que armazenar objetos por mais tempo do que o necessário.

Quando encontrar possíveis vazamentos de memória, use as guias Campos e Referências em Detalhes da instância para acessar a instância ou a linha de código-fonte de interesse.

Acionar vazamentos de memória para teste

Para provocar vazamentos de memória e testar seu app, use um dos seguintes métodos:

  • Gire o dispositivo da orientação retrato para paisagem e vice-versa várias vezes em diferentes estados de atividade. Muitas vezes, a rotação do dispositivo pode fazer com que o app vaze um objeto Activity, Context ou View porque o sistema recria o Activity e, se o app mantiver uma referência a um desses objetos em outro lugar, o sistema não conseguirá eliminá-lo por meio da coleta de lixo.
  • Alterne entre seu app e outro app em diferentes estados de atividade. Por exemplo, navegue até a tela inicial e volte para o app.