1

Android では、すべての Activity サブクラスがライフサイクル メソッドからスーパー メソッドを呼び出す必要があります。スーパー メソッドが呼び出されない場合、例外がスローされます。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.
    }
}
4

2 に答える 2

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();

    }

この例は議論のためのものです。しかし、よく見れば、実際の例に出くわすと確信しています。

この種の混合順序は、テンプレート デザイン パターンを使用して実現するのは困難です。

于 2012-02-21T11:09:30.283 に答える
0

スーパークラス メソッドを呼び出さないとアプリケーションが正しく動作しないため、RuntimeException忘れないように API が をスローします。

于 2013-04-17T02:42:07.047 に答える