Program Tip

super.onCreate (savedInstanceState);

programtip 2020. 10. 7. 08:05
반응형

super.onCreate (savedInstanceState);


나는 안드로이드 응용 프로그램 프로젝트를 생성하고 MainActivity.java에서> onCreate()가 호출됩니다 super.onCreate(savedInstanceState).

초심자라면 누구든지 위 줄의 목적을 설명 할 수 있습니까?


모든 활동은 일련의 메서드 호출을 통해 시작됩니다. onCreate()이 호출 중 첫 번째입니다.

각각의 모든 활동은 android.app.Activity직접 또는의 다른 하위 클래스를 하위 클래스로 확장 하여 확장 됩니다 Activity.

Java에서는 클래스에서 상속 할 때 해당 메서드를 재정 의하여 자체 코드를 실행할 수 있습니다. 이것의 매우 일반적인 예는 toString()확장 할 때 메서드를 재정의하는 것입니다 java.lang.Object.

메서드를 재정의 할 때 클래스의 메서드를 완전히 대체하거나 기존 부모 클래스의 메서드를 확장 할 수 있습니다. 를 호출 super.onCreate(savedInstanceState);하여 Dalvik VM에 부모 클래스의 onCreate ()에있는 기존 코드 외에 코드를 실행 하도록 지시합니다. 이 줄을 생략하면 코드 만 실행됩니다. 기존 코드는 완전히 무시됩니다.

그러나 메서드에이 슈퍼 호출을 포함해야합니다. 그렇지 않으면 onCreate()코드 Activity가 실행되지 않고 앱이 활동에 컨텍스트가 할당되지 않는 것과 같은 모든 종류의 문제가 발생하기 때문입니다. a SuperNotCalledException) 컨텍스트가 없다는 것을 알아 내기 전에).

간단히 말해서, 안드로이드 자체 클래스는 엄청나게 복잡 할 수 있습니다. 프레임 워크 클래스의 코드는 UI 그리기, 집 청소, 활동 및 애플리케이션 수명주기 유지와 같은 작업을 처리합니다. super호출을 통해 개발자는이 복잡한 코드를 백그라운드에서 실행할 수 있으며 여전히 자체 앱에 대해 좋은 수준의 추상화를 제공 할 수 있습니다.


* 파생 클래스 onCreate(bundle)메서드는이 메서드의 수퍼 클래스 구현을 호출해야합니다. " super "키워드가 사용되지 않으면 예외 SuperNotCalledException이 발생합니다 .

의 상속을 Java위해 수퍼 클래스 메서드를 재정의하고 위의 클래스 메서드를 실행 super.methodname()하려면 재정의 파생 클래스 메서드에서 사용합니다.

Android 클래스는 동일한 방식으로 작동합니다. 의미있는 코드가 작성된 메서드가있는 Activity클래스를 확장하고 onCreate(Bundle bundle)정의 된 액티비티에서 해당 코드를 실행하려면과 같은 onCreate () 메서드와 함께 super 키워드를 사용합니다 super.onCreate(bundle).

이것은 Activity 클래스 onCreate()메서드로 작성된 코드 이며 Android Dev 팀은 나중에이 메서드에 더 의미있는 코드를 추가 할 수 있습니다. 따라서 추가 사항을 반영하려면 클래스 에서 super.onCreate () 를 호출해야합니다 Activity.

protected void  onCreate(Bundle savedInstanceState) {
    mVisibleFromClient = mWindow.getWindowStyle().getBoolean(
    com.android.internal.R.styleable.Window_windowNoDisplay, true);
    mCalled = true;
}

boolean mVisibleFromClient = true;

/**
 * Controls whether this activity main window is visible.  This is intended
 * only for the special case of an activity that is not going to show a
 * UI itself, but can't just finish prior to onResume() because it needs
 * to wait for a service binding or such.  Setting this to false prevents the UI from being shown during that time.
 * 
 * <p>The default value for this is taken from the
 * {@link android.R.attr#windowNoDisplay} attribute of the activity's theme.
 */

또한 활동에서를 mCalled호출했음을 의미 하는 변수 유지합니다 super.onCreate(savedBundleInstance).

final void performStart() {
    mCalled = false;
    mInstrumentation.callActivityOnStart(this);
    if (!mCalled) {
        throw new SuperNotCalledException(
            "Activity " + mComponent.toShortString() +
            " did not call through to super.onStart()");
    }
}

여기에서 소스 코드를 참조하십시오.

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/app/Activity.java#Activity.onCreate%28android.os.Bundle%29


Because upon super.onCreate() it will reach the Activity (parent class of any activity) class to load the savedInstanceState,and we normaly don't set any saved instance state, but android framework made such a way that, we should be calling that.


It is information you want returned to your application, via onCreate(), if the activity is destroyed and restarted due to some implicit reason (e.g., not because the user pressed the back button). The most common use of onSaveInstanceState() is to handle screen rotations, as by default, activities are destroyed and recreated when the user slides out the G1 keyboard.

The reason to call super.onCreate(savedInstanceState) is because your code will not compile otherwise. ;-)

참고URL : https://stackoverflow.com/questions/14671897/super-oncreatesavedinstancestate

반응형