Подтвердить что ты не робот

Super.onCreate(savedInstanceState);

Будучи новичком, у меня есть очень простой вопрос: я создал проект приложений для Android в Eclipse, в MainActivity.java > onCreate() он вызывает super.onCreate(savedInstanceState).

Может ли кто-нибудь объяснить, что является целью вышеуказанной строки?

4b9b3361

Ответ 1

Каждое действие, которое вы делаете, запускается с помощью последовательности вызовов методов. onCreate() - это первый из этих вызовов.

Каждая из ваших действий расширяет android.app.Activity либо напрямую, либо путем подкласса другого подкласса Activity.

В Java, когда вы наследуете класс, вы можете переопределить его методы для запуска своего собственного кода. Очень распространенным примером этого является переопределение метода toString() при расширении java.lang.Object.

Когда мы переопределяем метод, у нас есть возможность полностью заменить метод в нашем классе или расширить существующий метод родительского класса. Вызвав super.onCreate(savedInstanceState);, вы сообщите, чтобы Dalvik VM выполнил ваш код в дополнение к существующему коду в onCreate() родительского класса. Если вы оставите эту строку, то выполняется только ваш код. Существующий код полностью игнорируется.

Однако вы должны включить этот супервызов в свой метод, потому что, если вы этого не сделаете, код onCreate() в Activity никогда не будет запущен, и ваше приложение будет запущено во всех типах проблем, таких как отсутствие назначенного Контекста (хотя вы попадете в SuperNotCalledException, прежде чем у вас появится возможность выяснить, что у вас нет контекста).

Короче говоря, собственные классы Android могут быть невероятно сложными. Код в классах классов обрабатывает такие вещи, как рисунок пользовательского интерфейса, очистка дома и сохранение жизненных циклов активности и приложений. super позволяет разработчикам запускать этот сложный код за кулисами, при этом обеспечивая хороший уровень абстракции для наших собственных приложений.

Ответ 2

Метод Derived class onCreate(bundle) должен вызывать реализацию суперкласса этого метода. Если вы этого не сделаете, исключение будет выбрано SuperNotCalledException

В Java Когда вы выполняете наследование Если вы хотите переопределить метод суперкласса и хотите выполнить вышеописанный метод метода класса, в этом случае мы используем super.methodname() в методе переопределения производного класса;

Класс Android работает одинаково. Вы расширяете класс Activity, у которого есть метод onCreate(Bundle bundle), в котором написан значащий код. Итак, чтобы выполнить этот код в нашей определенной деятельности. Вы должны использовать super.onCreate(bundle).

Это код, написанный в классе Activity class onCreate(), и, возможно, команда Android Dev добавит еще более значимый код в этот метод, поэтому вы всегда должны называть это в своем классе Activity.

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

boolean mVisibleFromClient = true;

/**
 * Control 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 allows
 * you to prevent your 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 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

Ответ 3

Потому что после super.onCreate() он достигнет класса Activity (родительский класс любой активности) для загрузки сохраненногоInstanceState, и мы нормально не устанавливаем какое-либо состояние сохраненного экземпляра, но андроидная инфраструктура была сделана таким образом, что мы должны это назвать.

Ответ 4

Это информация, которую вы хотите вернуть в приложение, через onCreate(), если действие уничтожается и перезапускается из-за какой-то неявной причины (например, не потому, что пользователь нажал кнопку "Назад" ). Самый распространенный использование onSaveInstanceState() предназначено для обработки поворотов экрана, так как по умолчанию, действия уничтожаются и воссоздаются при выходе пользователя клавиатура G1.

Причиной вызова super.onCreate(savedInstanceState) является то, что ваш код не будет компилироваться иначе.; -)