Правильный способ вызова super.onStop() при незарегистрировании слушателя

Каков правильный способ вызова super.onStop(), т.е. при незарегистрировании слушателя?

Я видел:

protected void onStop() {
  sensorManager.unregisterListener(this);
  super.onStop();
}

ИЛИ

protected void onStop() {
  super.onStop();  
  sensorManager.unregisterListener(this);
}

Ответ 1

Вы всегда должны сначала вызывать его, главным образом в качестве механизма защиты: если есть исключение, то метод экземпляра суперкласса уже вызывается.

Ответ 2

Это не имеет значения. Если вы не зависите от какого-либо состояния, которое продолжает быть инициализировано (и, насколько это касается любых классов каркасов, я могу гарантировать, что вы этого не сделаете), вы можете свободно называть его после суперкласса. Если суперкласс выбрасывает исключение, все ваше приложение будет терпеть крах, поэтому из-за этого нет причин заказывать один или другой.

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

Ответ 3

Из того, что я читаю, методы, которые вы переопределите, являются частью разрушения компонентов (onPause(), onStop(), onDestroy() и т.д.), вы должны сначала выполнить свою работу и связать себя с суперклассом как последнее. Таким образом, если Android очистит то, от чего зависит ваша работа, вы сначала сделаете свою работу.