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

enz*_*m83 18 android android-lifecycle android-activity

可以在该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);
}
Run Code Online (Sandbox Code Playgroud)

Com*_*are 72

那些组件创建(的一部分方法重写onCreate(),onStart(),onResume()等),你应该链超作为第一个发言,以确保Android有它的机会来完成工作,你试图做一些事情,依靠这项工作之前,已经完成了.

那些成分破坏(部分方法重写onPause(),onStop(),onDestroy()等),你应该先和链做你的工作,以超作为最后一件事.这样,如果Android清理了您的工作所依赖的东西,您将首先完成您的工作.

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

其他一切 - 比如onActivityResult()- 总体上取决于你.我倾向于链接到超类作为第一件事,但除非你遇到问题,以后链接应该没问题.

  • 但为什么官方文档说:"总是先在onPause()中调用超类方法"?http://developer.android.com/training/basics/activity-lifecycle/pausing.html#Pause (12认同)
  • @arekolek:2012 年,当这个答案写出来时,这些都不存在。现在,在 2018 年,我同意某些特定的库或其他东西可能需要您在“super.onCreate()”调用之前采取行动。一般来说(即,如果您不使用此类库),我支持这个答案。 (3认同)