Antworten:
Jede Aktivität, die Sie ausführen, wird durch eine Folge von Methodenaufrufen gestartet. onCreate()
ist der erste dieser Anrufe.
Jede Ihrer Aktivitäten wird android.app.Activity
entweder direkt oder durch Unterklasse einer anderen Unterklasse von erweitert Activity
.
Wenn Sie in Java von einer Klasse erben, können Sie deren Methoden überschreiben, um Ihren eigenen Code darin auszuführen. Ein sehr häufiges Beispiel hierfür ist das Überschreiben der toString()
Methode beim Erweitern java.lang.Object
.
Wenn wir eine Methode überschreiben, haben wir die Möglichkeit, die Methode in unserer Klasse vollständig zu ersetzen oder die Methode der vorhandenen übergeordneten Klasse zu erweitern. Durch Aufrufen weisen super.onCreate(savedInstanceState);
Sie die Dalvik-VM an, Ihren Code zusätzlich zum vorhandenen Code in onCreate () der übergeordneten Klasse auszuführen. Wenn Sie diese Zeile weglassen, wird nur Ihr Code ausgeführt. Der vorhandene Code wird vollständig ignoriert.
Sie müssen diesen Superaufruf jedoch in Ihre Methode aufnehmen, denn wenn Sie dies nicht tun, wird der onCreate()
Code in Activity
nie ausgeführt, und Ihre App wird auf alle möglichen Probleme stoßen, z. B. wenn der Aktivität kein Kontext zugewiesen wird (obwohl Sie darauf stoßen a SuperNotCalledException
bevor Sie die Chance haben herauszufinden, dass Sie keinen Kontext haben).
Kurz gesagt, die eigenen Klassen von Android können unglaublich komplex sein. Der Code in den Framework-Klassen behandelt Dinge wie das Zeichnen von Benutzeroberflächen, das Reinigen von Häusern und das Verwalten des Aktivitäts- und Anwendungslebenszyklus. super
Aufrufe ermöglichen es Entwicklern, diesen komplexen Code hinter den Kulissen auszuführen und gleichzeitig ein gutes Abstraktionsniveau für unsere eigenen Apps bereitzustellen.
* Die abgeleitete Klassenmethode onCreate(bundle)
muss die Implementierung dieser Methode in der Oberklasse aufrufen. Es wird eine Ausnahme SuperNotCalledException ausgelöst, wenn das Schlüsselwort " super " nicht verwendet wird.
Java
Verwenden Sie super.methodname()
für die Vererbung in , um die Oberklassenmethode zu überschreiben und auch die obige Klassenmethode auszuführen, die überschriebene abgeleitete Klassenmethode.
Die Android-Klasse funktioniert genauso. Verwenden Sie das Super-Schlüsselwort mit der Methode onCreate () like, indem Sie die Activity
Klasse mit einer onCreate(Bundle bundle)
Methode erweitern, in der aussagekräftiger Code geschrieben ist, und diesen Code in der definierten Aktivität ausführen super.onCreate(bundle)
.
Dies ist ein Code, der in der Aktivitätsklassenmethode geschrieben wurde onCreate()
, und das Android Dev-Team fügt dieser Methode möglicherweise später einen aussagekräftigeren Code hinzu. Um die Ergänzungen wiederzugeben , sollten Sie die Datei super.onCreate () in Ihrer Activity
Klasse aufrufen .
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.
*/
Außerdem wird die Variable beibehalten, mCalled
was bedeutet, dass Sie die super.onCreate(savedBundleInstance)
in Ihrer Aktivität aufgerufen haben .
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
Siehe Quellcode hier.
Weil es bei super.onCreate () die Activity-Klasse (übergeordnete Klasse einer Aktivität) erreicht, um den savedInstanceState zu laden, und wir normalerweise keinen gespeicherten Instanzstatus festlegen, aber das Android-Framework so erstellt hat, dass wir aufrufen sollten Das.
super.onCreate(savedInstanceState)
, es sei denn, Sie haben einen anderen Fehler darin
Es handelt sich um Informationen, die Sie über onCreate () an Ihre Anwendung zurückgeben möchten, wenn die Aktivität aus einem impliziten Grund zerstört und neu gestartet wird (z. B. nicht, weil der Benutzer die Zurück-Taste gedrückt hat). Die häufigste Verwendung von onSaveInstanceState () ist die Verarbeitung von Bildschirmdrehungen, da Aktivitäten standardmäßig zerstört und neu erstellt werden, wenn der Benutzer die G1-Tastatur herauszieht.
Der Grund für den Aufruf von super.onCreate (savedInstanceState) liegt darin, dass Ihr Code sonst nicht kompiliert wird. ;-);