请查看以下示例代码
@Override
protected void onPause() {
...some code here...
super.onPause();
}
和
@Override
protected void onPause() {
super.onPause();
...some code here...
}
当我询问代码差异时,我并不是指执行流程,这是明显的。
那么这些代码之间的真正差异是什么?建议何时在 super()
电话前使用您的代码,以及何时在 super()
电话后使用您的代码?我想有些情况确实很重要。
答案 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
方法,我很确定我不会遇到任何问题。但通常必须在子类之前初始化超类实例并在子类之后取消初始化。理想情况下,您应该在super
,onCreate()
,onStart()
和onRestart()
之后以及onResume()
onPause()
之前调用onStop()
后运行代码1}}和onDestroy()
。
但又一次。所有这些代码都在UI线程上执行,因此除了一些罕见的情况之外,代码的顺序没有多大意义。但最好的想法是阅读源代码并了解它的工作原理和实际情况。