Я считал, что это - ошибка и источник утечек памяти в приложении 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();
}
...
}
Это нормально и не вызовет утечки памяти.
Как только onCreate
завершит выполнение, h
выйдет за рамки и получит право на сборку мусора. Если h
статичен, вы столкнетесь с проблемами. Только когда ссылка на контекст переживет жизненный цикл самого контекста, произойдет утечка памяти. Несколько полезных советов:
Context.getApplicationContext ()
. Этот контекст будет существовать, пока живо ваше приложение. Область применения HelperClass находится только в пределах вашей функции onCreate, поэтому после выполнения onCreate ваш объект "h" больше не нужен и подлежит сборке мусора.
Это была бы другая история, если бы "h" был статическим членом - ЭТО был бы отличный способ утечки памяти.