Я создал проект приложения для Android, и в MainActivity.java> onCreate()
он вызывает super.onCreate(savedInstanceState)
.
Как новичок, может ли кто-нибудь объяснить, для чего предназначена эта строка?
Ответы:
Каждое действие, которое вы выполняете, запускается последовательностью вызовов методов. onCreate()
это первый из этих звонков.
Каждая из ваших Activity расширяется android.app.Activity
либо напрямую, либо путем создания подкласса другого подкласса Activity
.
В Java, когда вы наследуете класс, вы можете переопределить его методы, чтобы запустить в них свой собственный код. Очень распространенный пример этого - переопределение toString()
метода при расширении java.lang.Object
.
Когда мы переопределяем метод, у нас есть возможность полностью заменить метод в нашем классе или расширить метод существующего родительского класса. По призванию super.onCreate(savedInstanceState);
, вы говорите Dalvik VM для запуска кода в дополнение к существующему коду в OnCreate () родительского класса. Если вы пропустите эту строку, будет запущен только ваш код . Существующий код полностью игнорируется.
Однако вы должны включить этот супервызов в свой метод, потому что, если вы этого не сделаете, onCreate()
код Activity
никогда не будет запущен, и ваше приложение столкнется со всевозможными проблемами, такими как отсутствие контекста, назначенного для Activity (хотя вы нажмете a SuperNotCalledException
до того, как у вас будет возможность выяснить, что у вас нет контекста).
Короче говоря, собственные классы Android могут быть невероятно сложными. Код в классах фреймворка обрабатывает такие вещи, как рисование пользовательского интерфейса, уборка дома и поддержание жизненных циклов Activity и приложений. super
Вызовы позволяют разработчикам запускать этот сложный код за кулисами, при этом обеспечивая хороший уровень абстракции для наших собственных приложений.
* onCreate(bundle)
Метод производного класса должен вызывать реализацию этого метода суперкласса. Это вызовет исключение SuperNotCalledException, если ключевое слово « super » не используется.
Для наследования в Java
, чтобы переопределить метод суперкласса, а также выполнить вышеуказанный метод класса, используйте super.methodname()
в переопределяющем методе производного класса;
Класс Android работает точно так же. Расширяя Activity
класс, у которого есть onCreate(Bundle bundle)
метод, в котором написан значимый код, и для выполнения этого кода в определенной операции используйте ключевое слово super с методом onCreate (), например super.onCreate(bundle)
.
Это код, написанный на onCreate()
методе класса Activity, и команда разработчиков Android может позже добавить в этот метод более содержательный код. Итак, чтобы отразить дополнения, вы должны вызвать 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()");
}
}
Смотрите исходный код здесь.
Поскольку после super.onCreate () он достигнет класса Activity (родительский класс любого действия) для загрузки сохраненного состояния экземпляра, и мы обычно не устанавливаем какое-либо сохраненное состояние экземпляра, но структура Android сделана таким образом, что мы должны вызывать что.
super.onCreate(savedInstanceState)
успешно компилироваться, даже если вы не позвоните , если только у вас нет других ошибок в нем
Это информация, которую вы хотите вернуть своему приложению через onCreate (), если действие уничтожено и перезапущено по какой-то неявной причине (например, не потому, что пользователь нажал кнопку возврата). Чаще всего onSaveInstanceState () используется для обработки поворота экрана, так как по умолчанию действия уничтожаются и воссоздаются, когда пользователь вынимает клавиатуру G1.
Причина вызова super.onCreate (savedInstanceState) в том, что иначе ваш код не будет компилироваться. ;-)