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

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

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

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

И назовите это из Activity:

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

Solutions Collecting From Web of "Android: ссылки на утечку контекста и памяти"

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

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

  • Используйте Context.getApplicationContext() когда это возможно. Этот контекст будет жить до тех пор, пока ваше приложение будет живым.
  • Будьте осторожны при использовании статических полей и внутренних классов.
  • Запустите приложение через профилировщик, чтобы проверить наличие утечек.

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

Было бы иначе, если бы «h» был статическим членом – это был бы отличный способ утечки памяти.