Разница между кодом до и после super()
Посмотрите на примеры кода ниже
@Override
protected void onPause() {
...some code here...
super.onPause();
}
и
@Override
protected void onPause() {
super.onPause();
...some code here...
}
Когда я спросил о различиях в коде, я не имел в виду о потоке исполнения, который является анонимным.
Итак, какова разница между этими кодами реальная? Когда рекомендуется использовать код до super()
, а когда использовать код после super()
? Наверное, есть ситуации, когда это имеет значение.
Ответы
Ответ 1
Вы не должны размещать какой-либо ваш код до super.onPause()
, поэтому этот метод позволяет системе делать то, что нужно для правильной приостановки приложения. Любой код, который вы хотите выполнить в обратном вызове onPause()
, должен быть размещен после вызова super.onPause()
. Надеюсь, это поможет.
Цитата из Activities:
Примечание. Ваша реализация этих методов жизненного цикла должна всегда вызывать реализацию суперкласса перед выполнением любой работы, как показано в приведенных выше примерах.
Ответ 2
Если бы эта ссылка была связана с нитью с идентичным объектом:
super.onResume() в начале или конце метода? Это важно?
Обратите внимание на цитату из Dianne Hackborn
Да, это хороший образец. В большинстве случаев это, вероятно, не имеет значения, но
это общее правило: при любой инициализации пусть суперкласс
выполняют свою работу сначала; во время любого вида финализации вы выполняете свою работу
первый.
Ответ 3
У меня никогда не возникало проблем с вызовом методов super
до моего кода, и я уверен, что не столкнулся бы с какими-либо проблемами, если бы я вызвал методы super
после моего кода. Но обычно экземпляры суперклассов должны быть инициализированы до и деинициализированы после подклассов. Поэтому в идеале вы должны запустить свой код после вызова super
в onCreate()
, onStart()
, onRestart()
и onResume()
и раньше в onPause()
, onStop()
и onDestroy()
.
Но еще раз. Весь этот код выполняется в потоке пользовательского интерфейса, поэтому порядок вашего кода не имеет большого смысла, исключая некоторые редкие случаи. Но лучшая идея - прочитать исходный код и понять, как он работает и что действительно происходит.