Android要求所有Activity子类从其生命周期方法中调用超级方法。如果未调用super方法,则抛出异常。为什么Android使用RuntimeException机制来强制调用超级方法。为什么它不使用“模板”设计模式,以便在子方法之前自动执行超级方法。例如,onDestroy()可以按如下方式处理: -
Class Activity{
public void onDestroyFrmwork()
{
//do whatever the super onDestroy() method has to do
onDestroy();//this will invoke the subclass method.
}
public void onDestroy()
{
//empty. will get overridden by subclasses.
}
}
答案 0 :(得分:2)
我知道我在被问到这个问题11个月后才回答这个问题。我想原因是调用超级方法的顺序无法提前确定。例如,我可能希望在super.onDestroy()
之后调用super.onDestroy()
之前进行清理,或者甚至将它混合起来,如下所示:
@Override
protected void onDestroy() {
// Do some initial clean-up
preDestroy();
//Then call super
super.onDestroy();
//In the end do some final clean-up
postDestroy();
}
这个例子是为了争论;但是如果你看起来足够努力,我相信你会遇到现实世界的例子。
使用模板设计模式很难实现这种混合排序。
答案 1 :(得分:0)
如果您不调用超类方法,您的应用程序将无法正常工作,因此API会抛出RuntimeException
以确保您不会忘记这样做。