onDestroy() - устанавливать или не устанавливать переменные экземпляра в null?

Является ли хорошей идеей специально установить переменные экземпляра в значение null в обратном вызове onDestroy() действия? Что-то вроде этого:

    @Override
protected void onDestroy() {
    super.onDestroy();
    mClassVariable1 = null;
    mClassVariable2 = null;
    mClassVariable3 = null;
}

Если я правильно помню из Java SE, любые ссылки, которые изолированы и не связаны с работающей программой, в любом случае могут быть удалены сборщиком мусора. Делает ли это вышеизложенное излишним?

С другой стороны, если жизненный цикл мобильных устройств отличается, будет ли вышеизложенное лучшей практикой?

Я знаю, что это не повредит, но иногда есть несколько переменных класса (ссылки на отдельные элементы пользовательского интерфейса и т. д.), поэтому мне действительно хотелось бы знать для собственного понимания, что происходит на самом деле. на.

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


person OceanBlue    schedule 07.04.2011    source источник
comment
Вопрос: Хотя OnDestroy() вызывается, когда вы либо выходите из действия, либо поворачиваете свое устройство, сохраняется ли экземпляр класса? Если это так, не будет ли опасно обнулять переменные.   -  person Salsero69    schedule 07.04.2011
comment
@ Salsero69: Очень хороший вопрос. Я не уверен, надеюсь, что ответы здесь ответят на него.   -  person OceanBlue    schedule 07.04.2011
comment
Я также сталкиваюсь с тем же вопросом, надеюсь, кто-то даст больше объяснений. Я также поместил переменную экземпляра null в on-destroy, но не уверен, что она работает правильно.   -  person Bhavikkumar    schedule 12.03.2016


Ответы (1)


Вы были правы, когда сказали, что сборщик мусора будет собирать изолированные ссылки. В частности, будет собран любой граф ссылок, не связанный с потоком выполнения. Из-за этого нет веской причины устанавливать для ваших переменных значение null, которое я вижу. Любые преимущества будут намного перевешиваться стоимостью обслуживания кода.

person Micah Hainline    schedule 07.04.2011
comment
Может потребоваться явная нулевая ссылка в onDestroy. Вам не гарантируется, что ваша активность убьет сразу и, следовательно, сохранит память. Взгляните на stackoverflow.com/questions/ 17187004/ - person Niels; 19.06.2013
comment
Установка переменных экземпляра в значение null в onDestroy не является ответом. Ищите утечки, в которых вы сохраняете ссылку на уничтоженную активность. onDestroy означает, что система завершила действие. Убедитесь, что ваш код тоже. - person Micah Hainline; 19.07.2013