Ich habe ein Android-Anwendungsprojekt erstellt und in MainActivity.java> onCreate()
ruft es auf super.onCreate(savedInstanceState)
.
Kann jemand als Anfänger erklären, was der Zweck der obigen Zeile ist?
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 Siesuper.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 eineronCreate(Bundle bundle)
Methode erweitern, in der aussagekräftiger Code geschrieben ist, und diesen Code in der definierten Aktivität ausführensuper.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 IhrerActivity
Klasse aufrufen .Außerdem wird die Variable beibehalten,
mCalled
was bedeutet, dass Sie diesuper.onCreate(savedBundleInstance)
in Ihrer Aktivität aufgerufen haben .Siehe Quellcode hier.
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
quelle
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.
quelle
super.onCreate(savedInstanceState)
, es sei denn, Sie haben einen anderen Fehler darinEs 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. ;-);
quelle