为什么Activity API生命周期方法使用RuntimeException来强制子类调用超级方法?

时间:2011-03-17 09:09:33

标签: android-lifecycle

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.
    }
}

2 个答案:

答案 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以确保您不会忘记这样做。