Почему простой пример использования Activity в Android вызывает утечку памяти? - PullRequest
0 голосов
/ 17 марта 2020

Я получил следующий пример, и я не уверен, почему это вызывает утечку памяти? Я не могу обернуть голову вокруг него?!

public class MyLeakActivity extends Activity {

// static reference to evil

   private static final Evil e;   
   public MyLeakActivity() {
     e = new Evil();
   }

private final class Evil {
      }
}

Заранее спасибо.

привет Фабиан

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Взгляните сюда ... эта статья предназначена для Android разработки.

https://dzone.com/articles/a-troublesome-legacy-memory-leaks-in-java

  • Избегайте использования нестатических c Внутренние классы в вашей Деятельности, используйте внутренний класс stati c и создайте WeakReference.

Я думаю, что ваш дизайн никогда не сможет разрешить вмещающему классу g c 'd. Если у вас нет очень веской причины использовать внутренний класс, не относящийся к состоянию c (может быть, по причинам, связанным с областью видимости), хорошее правило - всегда начинать с внутреннего класса, объявленного как статус c.

1 голос
/ 17 марта 2020

Перед созданием нового объекта вы должны проверить, имеет ли значение e == null.

...