super()之前和之后的代码之间的区别
看下面的示例代码
@Override protected void onPause() { ...some code here... super.onPause(); }
和
@Override protected void onPause() { super.onPause(); ...some code here... }
当我问到代码的不同之处时,我并不是说执行的stream程很诡异。
那么这些代码之间的真正区别是什么? 什么时候build议在 super()
调用之前使用你的代码,以及在 super()
调用之后何时使用你的代码? 我猜这有什么问题。
你不应该在super.onPause()
之前放置你的任何代码,因为这个方法可以让系统完成正确地暂停你的应用程序所需要做的事情。 你想在onPause()
callback中执行的代码应该放在super.onPause()
的调用之后。 希望这可以帮助。
从活动报价:
注意:在执行任何工作之前,您的这些生命周期方法的实现必须始终调用超类的实现,如上例所示。
不得不用这个链接到一个相同主题的线程:
super.onResume()方法的开始或结束? 有关系吗?
请注意Dianne Hackborn的报价
是的,这是一个很好的模式。 在大多数情况下,这可能并不重要,但是这是一个普遍的规则:在任何一种初始化过程中,让超类先做好工作; 在任何forms的定稿之前,你先做好你的工作。
我从来没有遇到任何问题,在我的代码之前调用super
方法,我敢肯定,如果我的代码之后调用super
方法,我不会遇到任何问题。 但是通常超类实例必须在子类之前被初始化,并被初始化。 所以理想情况下,你应该在onCreate()
, onStart()
, onRestart()
和onResume()
以及onPause()
, onStop()
和onDestroy()
调用super
之后运行代码。
但还有一次。 所有这些代码都是在UI线程上执行的,所以你的代码的顺序在排除一些罕见的情况下是没有什么意义的。 但最好的想法是阅读源代码,并了解它是如何工作的,真正发生了什么。