2012-03-08 4 views
17

Результаты распознавания речи можно прочитать в методе onActivityResult(int requestCode, int resultCode, Intent data), как показано в this example. Этот метод переопределяет тот же метод в классе 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); 
} 

ответ

64

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

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

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

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

+10

Но почему официальный документ говорит: «Всегда сначала вызывайте метод суперкласса» в onPause()? http://developer.android.com/training/basics/activity-lifecycle/pausing.html#Pause – petrnohejl

+1

awesome .. спасибо :) – stinepike

+6

@petrnohejl, потому что документы плохие. – dcow

4

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

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

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

Смежные вопросы