Должен ли вызов метода суперкласса быть первым утверждением?

Результаты распознавания речи можно прочитать в методе onActivityResult(int requestCode, int resultCode, Intent data), как показано в в этом примере. Этот метод переопределяет тот же метод в классе Activity: почему вызов метода суперкласса не является первым утверждением?

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
        // Fill the list view with the strings the recognizer thought it could have heard
        // ...
    }

    super.onActivityResult(requestCode, resultCode, data);
}

Ответ 1

Методы, которые вы переопределите, которые являются частью создания компонентов (onCreate(), onStart(), onResume() и т.д.), вы должны привязать суперкласс к первому утверждению, чтобы убедиться, что у Android есть шанс сделать перед тем, как попытаться сделать что-то, что опирается на эту работу.

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

Способы, возвращающие нечто, отличное от void (onCreateOptionsMenu() и т.д.), иногда вы привязываетесь к суперклассу в операторе return, предполагая, что вы специально не делаете то, что необходимо для принудительного получения определенного возвращаемого значения.

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

Ответ 2

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

В целом, хотя это не имеет значения, и если это произойдет, это будет упомянуто в SDK - я столкнулся с ним, упомянул несколько мест в SKD (я думаю, о документации по диалогам), но я не могу точно помните, на какой странице/разделе он находится.

Ниже приведено более подробное обсуждение этой темы: http://groups.google.com/group/android-developers/browse_thread/thread/9ddb2b06c21c8457