Android: Ссылки на Контекст и утечки памяти

Я считал, что это - ошибка и источник утечек памяти в приложении Android для хранения долговечных ссылок на Контекст.

Но я не понимаю, нормально ли создавать класс, который похож на этого:

public class HelperClass {
    private Context context;

    public HelperClass(Context context) {
        this.context = context;
    }
    public void myHelperMethod() {
        // uses this.context
    }
}

И назовите его от Действия:

public class MyActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        HelperClass h = new HelperClass(this);
        h.myHelperMethod();
    }

    ...
}
29
задан Guido 6 October 2017 в 20:50
поделиться

2 ответа

Это нормально и не вызовет утечки памяти.

Как только onCreate завершит выполнение, h выйдет за рамки и получит право на сборку мусора. Если h статичен, вы столкнетесь с проблемами. Только когда ссылка на контекст переживет жизненный цикл самого контекста, произойдет утечка памяти. Несколько полезных советов:

  • По возможности используйте Context.getApplicationContext () . Этот контекст будет существовать, пока живо ваше приложение.
  • Будьте осторожны при использовании статических полей и внутренних классов.
  • Запустите приложение через профилировщик , чтобы проверить наличие утечек.
45
ответ дан 28 November 2019 в 01:33
поделиться

Область применения HelperClass находится только в пределах вашей функции onCreate, поэтому после выполнения onCreate ваш объект "h" больше не нужен и подлежит сборке мусора.

Это была бы другая история, если бы "h" был статическим членом - ЭТО был бы отличный способ утечки памяти.

7
ответ дан 28 November 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: