Я создал проект приложения для 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()"); } }
Смотрите исходный код здесь.
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
источник
Поскольку после super.onCreate () он достигнет класса Activity (родительский класс любого действия) для загрузки сохраненного состояния экземпляра, и мы обычно не устанавливаем какое-либо сохраненное состояние экземпляра, но структура Android сделана таким образом, что мы должны вызывать что.
источник
super.onCreate(savedInstanceState)
успешно компилироваться, даже если вы не позвоните , если только у вас нет других ошибок в немЭто информация, которую вы хотите вернуть своему приложению через onCreate (), если действие уничтожено и перезапущено по какой-то неявной причине (например, не потому, что пользователь нажал кнопку возврата). Чаще всего onSaveInstanceState () используется для обработки поворота экрана, так как по умолчанию действия уничтожаются и воссоздаются, когда пользователь вынимает клавиатуру G1.
Причина вызова super.onCreate (savedInstanceState) в том, что иначе ваш код не будет компилироваться. ;-)
источник