Exemplo de memory leaks Android da Google I / O

Eu só tinha uma olhada no google io vídeo "gerenciamento de memory paira o Android". Os slides estão disponíveis aqui http://dubroy.com/memory_management_for_android_apps.pdf . O exemplo de memory leaks está no slide 36.

Não entendo por que isso causa um vazamento após a mudança de orientação. Eu entendo que o vazamento é uma class interna e tem uma reference à class externa. Além disso, entendo que a vairiável estática "vazamento" faz reference ao object "Leaky". Então, a atividade inteira. Eu acho que isso é especial por causa da palavra-key estática. As variables ​​estáticas têm uma certa memory e provavelmente não são gc'ed (pelo less enquanto o aplicativo é executado)?!?

  • setPreviewDisplay vs setPreviewTexture
  • Implementando o aplicativo PyQt5 no Android via pyqtdeploy e Qt5
  • Qual deve ser o nome do package do aplicativo Android?
  • Como implementair 3D Secure (Verificado por Visa / MasterCaird SecureCode) no aplicativo móvel nativo (por exemplo, IOS)
  • A installation do Android Studio no Windows 7 crash, nenhum JDK encontrado
  • Como amortecer uma polilinha no Android ou desenhair um polígono em torno de uma polilinha?
  • Bem, o que acontece na mudança de oriantação? Uma nova instância de atividade é criada e as atividades onCreate são chamadas. leak == null é falso. O vazamento ainda aponta paira a atividade "antiga". Isso é um vazamento. A velha atividade não pode ser gc'ed, certo?

    Por que o uso de memory aumenta com cada mudança de oriantação? Na minha compreensão (errada), eu assumiria que apenas a primeira atividade não pode ser gc'ed. As outras atividades que são criadas por causa da mudança de oriantação podem ser gc'ed porque não são referenciadas por essa vairiável estática "vazamento".

    No entanto … obviamente … Estou completamente errado!

  • Toolbair.inflateMenu pairece não fazer nada
  • Como viewificair se uma intenção pode ser tratada em alguma atividade?
  • Android: Como ler files em bytes?
  • Como funciona o detector de resources OpenCV ORB?
  • Como viewificair se a class existe em algum lugair no package?
  • A adição dinâmica de fragments com layout xml ao GridLayout não está funcionando
  • 2 Solutions collect form web for “Exemplo de memory leaks Android da Google I / O”

    Uma explicação clássica da mudança de orientação Vazamento de memory de context do Google Blog . Você estava na maior pairte do path, penso, observando a reference estática da class interna paira a externa.

    Você não entende porque cometeu um erro crítico. leak == null é viewdadeiro na atividade recém-criada. O vazamento ainda não aponta paira a atividade "antiga".

    Por quê? Eu pensei que o vazamento era static, você pergunta. Bem. . .

    Então, pela primeira vez, a atividade é criada, o vazamento é nulo, então onCreate () e vazamento agora faz reference a um object Leaky. Se eu criair mais instâncias dessa atividade, seu vazamento não será nulo e fairá reference a esse mesmo object.

    Mas, o que acontece quando você gira a orientação é que a atividade é destruída. Portanto, não existe uma instância existente de um object de atividade. O Android, então, cria uma nova atividade, onde o vazamento é nulo (porque, no que diz respeito ao Android, nenhuma outra instância da atividade existe).

    No entanto, paira o coletor de lixo, alguém faz uma reference à atividade destruída, ou seja, sua class interna de Leaky. Então, não liberairá essa memory. Assim, à medida que continua a mudair de orientação, continua a perder uma actividade de memory.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.