19

この例onActivityResult(int requestCode, int resultCode, Intent data)に示すように、音声認識の結果はメソッドで読み取ることができます。このメソッドは class の同じメソッドをオーバーライドします。スーパークラス メソッドの呼び出しが最初のステートメントではないのはなぜですか?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);
}
4

2 に答える 2

82

コンポーネント作成の一部であるオーバーライドするメソッド ( onCreate()onStart()onResume()など) は、最初のステートメントとしてスーパークラスにチェーンして、その作業に依存する何かをしようとする前に Android がその作業を行う機会があることを確認する必要があります。されたこと。

コンポーネント破壊の一部であるオーバーライドするメソッド ( onPause()onStop()onDestroy()など)。最初に作業を行い、最後にスーパークラスにチェーンする必要があります。そうすれば、Android が作業に依存するものをクリーンアップした場合でも、最初に作業を完了できます。

void(など)以外のものを返すメソッドはonCreateOptionsMenu()、特定の戻り値を強制する必要があることを具体的に行っていないと仮定して、return ステートメントでスーパークラスにチェーンすることがあります。

他のすべて - などonActivityResult()- 全体として、あなた次第です。最初にスーパークラスにチェーンする傾向がありますが、問題が発生しない限り、後でチェーンしても問題ありません。

于 2012-03-08T22:49:35.880 に答える
4

通常、コントロールをクラス階層に戻す前に、オーバーライドされたアクティビティに固有のイベントを実行する必要があるためです。常にそうであるとは限らないことに注意してください。アプリの初期化時に発生するコールバックなど、最初に呼び出しを配置する必要がある場合があります。また、アプリが破棄されたときに発生するイベントの呼び出しを最後に配置して、最初にクリーンアップできるようにすることもできます。

一般的には問題ではありませんが、SDKで言及されます-SKDのいくつかの場所で言及されていることに遭遇しました(ダイアログに関するドキュメントについて考えています)が、正確には覚えていませんそれが置かれているページ/セクション。

ここにトピックに関するいくつかのより詳細な議論があります:http://groups.google.com/group/android-developers/browse_thread/thread/9ddb2b06c21c8457

于 2012-03-08T22:30:25.120 に答える