Разница между кодом до и после super () - PullRequest
43 голосов
/ 25 августа 2011

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

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

и

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

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

Так в чем же разница между этими кодами real ? Когда рекомендуется использовать ваш код до вызова super(), а когда использовать код после вызова super()? Я думаю, есть ситуации, когда это имеет значение.

Ответы [ 3 ]

42 голосов
/ 25 августа 2011

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

Цитата из Деятельность :

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

22 голосов
/ 25 августа 2011

Пришлось ли встраивать эту ссылку в поток с идентичной темой:

super.onResume () в начале или в конце метода?Имеет ли это значение?

Обратите внимание на цитату от Дайан Хакборн

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

10 голосов
/ 25 августа 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...