是否应该对超类方法的调用是第一个语句?

时间:2012-03-08 22:16:53

标签: android android-activity android-lifecycle

语音识别的结果可以使用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);
}

2 个答案:

答案 0 :(得分:68)

您覆盖的方法是组件创建的一部分(onCreate()onStart()onResume()等),您应该链接到超类作为第一个语句,以确保Android在你尝试做一些依赖于已完成工作的事情之前,它有机会完成它的工作。

你覆盖的方法是组件销毁的一部分(onPause()onStop()onDestroy()等),你应该先做你的工作并链接到超类作为最后一件事。这样,如果Android清理了你的工作所依赖的东西,你就会先完成你的工作。

返回除voidonCreateOptionsMenu()等)之外的其他内容的方法,有时你会链接到return语句中的超类,假设你没有专门做一些需要强制特定的东西返回值。

其他所有内容 - 例如onActivityResult() - 总体上取决于您。我倾向于链接到超类作为第一件事,但除非你遇到问题,否则以后链接应该没问题。

答案 1 :(得分:4)

因为您通常希望在将控件传递给类层次结构之前执行已覆盖活动的唯一事件。请注意,并非总是如此。有时您应该首先调用这些调用,例如在初始化应用程序时发生的回调中,并且您可能希望将它们放在应用程序被销毁时发生的事件的最后一次,以便您可以先清理它们。

总的来说虽然没关系,如果确实如此,它会在SDK中提及 - 我遇到它提到了SKD中的一些地方(我想关于对话框的文档)但我不能准确记住它所在的页面/部分。

此处有关于此主题的更详细讨论:http://groups.google.com/group/android-developers/browse_thread/thread/9ddb2b06c21c8457