Android Studio 0.4.6
您好,
我这里有一段代码片段。如果super应该是第一行或最后一行,我常常感到困惑。通常,我将它作为第一个调用,以便可以在父类中设置默认属性。但是,我之前正在研究一些代码。我只是想知道它有什么不同吗?
@Override
protected void onDestroy() {
mBroadCastMgr.unregisterReceiver(receiver);
super.onDestroy();
}
答案 0 :(得分:4)
与文档中一样:
onDestroy()=在销毁活动之前调用此回调 由系统。
示例说明:
/** Called just before the activity is destroyed. */
@Override
public void onDestroy() {
super.onDestroy();
Log.d(msg, "The onDestroy() event");
}
用户@Cristian普遍提到(不知道在哪里) -
这实际上取决于你想在onDestroy中做什么。这就是super.onDestroy
所做的事情(按此顺序):
1) 关闭活动管理的所有对话框。
2) 关闭活动管理的所有游标。
3) 关闭所有打开的搜索对话框。
话虽如此,
“如果你放在onDestroy中的逻辑与那些有关 android做的三件事,那么你可能不得不担心 订购。否则,在大多数情况下,没关系。“
答案 1 :(得分:2)
一般情况下,在创建某些内容时,当您破坏代码首先出现的内容时,代码会持续存在。就像在现实生活中一样,想象一下现有的东西,并从现有的东西中删除一些东西
在onDestroy
中,当然,首先放置代码,super.onDestory
onSaveInstanceState
中的另一个有趣的情况你应该首先放置你的代码,因为它是执行实际保存的super.onSaveInstanceState(因此你首先要添加你想要保存的额外代码)
答案 2 :(得分:2)
如果要安全地实施清理逻辑,可以使用下一个模式:
@Override
protected void onDestroy() {
try {
mBroadCastMgr.unregisterReceiver(receiver);
} finally {
super.onDestroy();
}
}
通常,应使用文档(方法javadoc)或超类'源代码在所有重写方法中检查超类调用的必要性。
答案 3 :(得分:1)
你应该在之前将其称为,因为否则超级类可能会覆盖一些修改。意味着如果您之前调用它,您的修改是最后一个并将被采用。
答案 4 :(得分:1)
如果派生类方法正在创建/更新对象信息,那么最好是第一行。
如果你有空/释放对象,那么最后使用:
@Override
protected void onInit() {
super.onInit();
}
答案 5 :(得分:0)
正如@ReeCube已经建议的那样,通常你想在执行你的代码之前调用超级实现来确保覆盖超级实现而不是反过来。 但至少有一个例外,我可以想到你应该在你的之后调用超级实现。想象一下,你正在构建对象。当然,您希望从超级实现开始,然后是您的。当然,构造的对称操作是破坏对象。在你调用你的父类来处理它自己创建的其余部分(递归方法)之前,你确实想要破坏你的混乱是合乎逻辑的,所以当你破坏对象时,你应该首先执行你的代码并且调用之后的超级实现。