The playground

More information here

vazamentos de Memória no Android – identificar, tratar e evitar

Johan Olsson Siga Abr 13, 2016 · 9 min de leitura No nosso dia-a busca da construção de melhores apps, nós, como desenvolvedores, precisa levar muitas coisas em consideração, a fim de permanecer na pista, uma das quais é para se certificar de que nossos aplicativos não falhar. Uma causa comum de acidentes são fugas […]
Johan Olsson
Johan Olsson

Siga

Abr 13, 2016 · 9 min de leitura

No nosso dia-a busca da construção de melhores apps, nós, como desenvolvedores, precisa levar muitas coisas em consideração, a fim de permanecer na pista, uma das quais é para se certificar de que nossos aplicativos não falhar. Uma causa comum de acidentes são fugas de memória. Este problema específico pode manifestar-se sob várias formas. Na maioria dos casos, vemos um aumento constante no uso da memória até que o aplicativo não pode alocar mais recursos e inevitavelmente cai. Em Java, isso muitas vezes resulta em um OutOfMemoryException sendo jogado. Em alguns casos raros, aulas vazadas podem até ficar por aqui por tempo suficiente para receber chamadas registradas, causando alguns bugs realmente estranhos e, muitas vezes, jogar a notória Estate ilegal.

para ajudar os outros a minimizar o tempo gasto na análise de código, vou apresentar alguns exemplos de vazamentos de memória, como identificá-los no Android Studio e, mais importante, como removê-los.

Disclaimer

o propósito deste post e seus exemplos de código é promover uma compreensão mais profunda da Gestão da memória, especialmente em Java. A arquitetura geral, a gestão de threads e o tratamento de solicitações HTTP em execução mostradas não são ideais para um ambiente de produção e servem meramente como portadora do ponto a ser feito: vazamentos de memória no Android é uma coisa a ser considerada.

registar os ouvintes

isto não deve ser realmente um problema, mas com demasiada frequência vejo chamadas para vários métodos de registo, mas os seus homólogos não regulamentados não estão em lado nenhum. Esta é uma fonte potencial de vazamentos, uma vez que estes métodos são claramente projetados para serem equilibrados uns pelos outros. Sem chamar o método unregister, a instância provavelmente manterá uma referência muito depois do objeto referenciado ter sido terminado e, assim, começará a vazar memória. Em Android isso é especialmente problemático se esse objeto é uma atividade, uma vez que eles muitas vezes possuem uma grande quantidade de dados. Deixa-me mostrar-te o que isso pode parecer.

neste exemplo, estamos deixando o localizador Android nos informar sobre atualizações de localização. Tudo o que precisamos para configurar isso é o próprio serviço do sistema e um callback para receber as atualizações. Aqui implementamos a interface de localização na própria atividade, o que significa que o LocationManager irá ter uma referência à nossa atividade. Agora, se o dispositivo fosse girado, uma nova atividade seria criada substituindo a antiga já registrada para atualizações de localização. Uma vez que um serviço de Sistema sobreviverá definitivamente a qualquer atividade, o LocationManager ainda manterá uma referência à atividade anterior, tornando impossível para o coletor de lixo recuperar os recursos ainda ligados a essa atividade em particular, resultando na fuga de memória. A rotação repetida do dispositivo irá, então, causar atividades não recuperáveis para encher a memória, levando, em última análise, a um OutOfMemoryException.

mas para corrigir uma fuga de memória, primeiro temos que ser capazes de encontrá-la. Felizmente Android Studio tem uma ferramenta construída chamada Android Monitor que podemos usar para observar o uso da memória, entre outras coisas. Tudo o que realmente temos que fazer é abrir o monitor Android e ir para a página monitores para ver quanta memória é usada e alocada em tempo real.

O Android no Monitor do Android Studio 2.0

quaisquer interações causadoras de alocação de recursos serão refletidas aqui, tornando-se um lugar ideal para manter o controle da utilização de recursos da sua aplicação. Para encontrar a nossa fuga de memória, precisamos de saber o que a memória contém, numa altura em que suspeitamos que a memória foi divulgada. Para este exemplo em particular, tudo o que temos de fazer é iniciar a nossa aplicação, rodar o dispositivo uma vez e, em seguida, invocar a acção Dump Java Heap (ao lado da memória, o terceiro ícone à esquerda). Isto irá gerar um ficheiro hprof, que contém uma imagem de memória no momento em que invocamos a acção. Após alguns segundos, o Android Studio automaticamente abre o arquivo, dando – nos uma representação visual da memória para uma análise fácil.

I will not go into depth about how to navegar the huge memory heap. Em vez disso, vou direcionar a sua atenção para as tarefas do analisador no canto superior direito da imagem abaixo. Tudo que você tem que fazer para detectar a fuga de memória introduzida no exemplo acima é verificar detectar atividades vazadas e, em seguida, pressione play para obter a atividade vazada para aparecer sob resultados de análise.

Deixe uma resposta

O seu endereço de email não será publicado.