Подтвердить что ты не робот

Разница между кодом до и после super()

Посмотрите на примеры кода ниже

@Override
protected void onPause() {
    ...some code here...
    super.onPause();
}

и

@Override
protected void onPause() {
    super.onPause();
    ...some code here...
}

Когда я спросил о различиях в коде, я не имел в виду о потоке исполнения, который является анонимным.

Итак, какова разница между этими кодами реальная? Когда рекомендуется использовать код до super(), а когда использовать код после super()? Наверное, есть ситуации, когда это имеет значение.

4b9b3361

Ответ 1

Вы не должны размещать какой-либо ваш код до super.onPause(), поэтому этот метод позволяет системе делать то, что нужно для правильной приостановки приложения. Любой код, который вы хотите выполнить в обратном вызове onPause(), должен быть размещен после вызова super.onPause(). Надеюсь, это поможет.

Цитата из Activities:

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

Ответ 2

Если бы эта ссылка была связана с нитью с идентичным объектом:

super.onResume() в начале или конце метода? Это важно?

Обратите внимание на цитату из Dianne Hackborn

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

Ответ 3

У меня никогда не возникало проблем с вызовом методов super до моего кода, и я уверен, что не столкнулся бы с какими-либо проблемами, если бы я вызвал методы super после моего кода. Но обычно экземпляры суперклассов должны быть инициализированы до и деинициализированы после подклассов. Поэтому в идеале вы должны запустить свой код после вызова super в onCreate(), onStart(), onRestart() и onResume() и раньше в onPause(), onStop() и onDestroy().

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