19

可以在该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);
}
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 回答