2011-03-17 1 views
1

Android에서는 모든 Activity 하위 클래스가 라이프 사이클 메소드에서 수퍼 메소드를 호출해야합니다. super 메소드가 호출되지 않으면 예외가 발생합니다. 안드로이드는 RuntimeException 메커니즘을 사용하여 수퍼 메소드를 강제로 호출하게하는 이유는 무엇입니까? super 메소드가 자식 메소드보다 먼저 자동으로 실행되도록 'Template'디자인 패턴을 사용하지 않는 이유는 무엇입니까? 예를 들면들의 OnDestroy()에 다음과 같이 처리 할 수 ​​있습니다 : -
Activity API 라이프 사이클 메소드가 RuntimeException을 사용하여 하위 클래스가 수퍼 메소드를 강제 실행하는 이유는 무엇입니까?

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

나는이 질문을 받았다 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(); 

    } 

을; 그러나 당신이 충분히 열심히 본다면 당신이 실제 세계의 예를 보게 될 것이라고 확신합니다.

이런 종류의 혼합 주문은 템플릿 디자인 패턴을 사용하여 달성하기 어려울 것입니다.

0

수퍼 클래스 메서드를 호출하지 않으면 응용 프로그램이 제대로 작동하지 않으므로 API에서 RuntimeException을 잊어 버릴 수 있습니다.

관련 문제