super()之前和之后代码的区别

时间:2011-08-25 13:22:11

标签: java android oop

请查看以下示例代码

@Override
protected void onPause() {
    ...some code here...
    super.onPause();
}

@Override
protected void onPause() {
    super.onPause();
    ...some code here...
}

当我询问代码差异时,我并不是指执行流程,这是明显的。

那么这些代码之间的真正差异是什么?建议何时在 super()电话前使用您的代码,以及何时在 super()电话后使用您的代码?我想有些情况确实很重要。

3 个答案:

答案 0 :(得分:42)

您不应将任何代码放在super.onPause()之前,因为此方法可让系统执行正确暂停应用程序所需的操作。您希望在onPause()回调中执行的任何代码都应在调用super.onPause()后放置。希望这会有所帮助。

引自Activities

  

注意:在执行任何工作之前,您对这些生命周期方法的实现必须始终调用超类实现,如上面的示例所示。

答案 1 :(得分:22)

不得不将此链接插入到具有相同主题的主题中:

super.onResume() at beginning or end of method? Does it matter?

请注意Dianne Hackborn的引用

是的,这是一个很好的模式。在大多数情况下,它可能并不重要,但是 这是一般规则:在任何类型的初始化期间,让超类 先做好自己的工作;在任何类型的定稿期间,你都会做你的工作 首先。

答案 2 :(得分:10)

我在代码之前调用super方法时从未遇到任何问题,如果我在代码之后调用了super方法,我很确定我不会遇到任何问题。但通常必须在子类之前初始化超类实例并在子类之后取消初始化。理想情况下,您应该在superonCreate()onStart()onRestart()之后以及onResume() onPause()之前调用onStop()后运行代码1}}和onDestroy()

但又一次。所有这些代码都在UI线程上执行,因此除了一些罕见的情况之外,代码的顺序没有多大意义。但最好的想法是阅读源代码并了解它的工作原理和实际情况。