96 votes

super.onCreate (savedInstanceState);

J'ai une question très basique. J'ai créé un projet d'application Android dans Eclipse. Dans MainActivity.java - onCreate() il appelle super.onCreate(savedInstanceState) .

Quelqu'un peut-il expliquer pourquoi il est nécessaire et quel est le but de cette ligne dans ce code.

170voto

Raghav Sood Points 43264

Chaque Activité que vous faites est démarrée par le biais d'une séquence d'appels de méthode. onCreate() est le premier de ces appels.

Chacun et chacune de vos Activités s'étend android.app.Activity , soit directement ou par sous-classement d'une autre sous-classe de la Activity.

En Java, lorsque vous héritez d'une classe, vous pouvez remplacer ses méthodes pour exécuter votre propre code. Un très bon exemple de ce est au centre de l' toString() méthode lors de l'extension d' java.lang.Object.

Lorsque nous surcharger une méthode, nous avons la possibilité de remplacer la totalité de la méthode dans notre classe, ou de l'extension de l'existant parent méthode de la classe. En appelant super.onCreate(savedInstanceState);, vous dites à la Dalvik VM pour exécuter votre code en plus pour le code existant dans le onCreate() de la classe parente. Si vous laissez cette ligne, puis seulement votre code est exécuté. Le code existant est complètement ignoré.

Cependant, vous devez inclure ce super appel dans votre méthode, car si vous n'avez pas le cas, alors l' onCreate() code Activity n'est jamais exécuté, et que votre application s'exécuter dans toutes sortes de problème comme avoir aucun Contexte affecté à l'Activité (si vous frapperont SuperNotCalledException avant d'avoir une chance de comprendre que vous n'avez pas de contexte).

En bref, Android propres classes peut être incroyablement complexe. Le code dans le cadre des classes de poignées de trucs comme dessin d'INTERFACE utilisateur, de nettoyage de la maison et le maintien de l'Activité et de l'application des cycles de vie. super des appels de permettre aux développeurs d'exécuter ce code complexe derrière les coulisses, tout en offrant un bon niveau d'abstraction pour nos propres applications.

5voto

TGMCians Points 11195

Classe dérivée onCreate(bundle) méthode doit s'appelle le super-classe de mise en œuvre de cette méthode. Si vous n'avez pas une exception sera levée SuperNotCalledException

En Java Lorsque vous ne l'héritage Si vous souhaitez remplacer la super méthode de la classe et ne veulent exécuter classe ci-dessus le code de la méthode aussi, dans ce cas, nous utilisons super.methodname() dans le remplacement de la méthode de la classe dérivée;

Android classe fonctionne en même. Vous êtes l'extension de l' Activity de la classe qui ont onCreate(Bundle bundle) méthode dans laquelle significative code est écrit. Donc, pour exécuter ce code dans notre activité. Vous devez utiliser super.onCreate(bundle).

Ce code est écrit en classe d'Activité onCreate() méthode et il pourrait Android Dev team va ajouter un peu plus de manière significative code de cette méthode à l'avance donc vous supposez que d'appeler dans votre Activity classe.

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's 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's theme.
 */

Il a également maintenir la variable mCalled , ce qui signifie que si vous avez appelé l' super.onCreate(savedBundleInstance) dans votre Activité.

final void performStart() {
    mCalled = false;
    mInstrumentation.callActivityOnStart(this);
    if (!mCalled) {
        throw new SuperNotCalledException(
            "Activity " + mComponent.toShortString() +
            " did not call through to super.onStart()");
    }
}

Voir le code source ici.

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

1voto

gOVIL Points 857

Parce que sur super.onCreate (), il atteindra la classe Activity (classe parente de toute activité) pour charger le savedInstanceState, et nous ne définirons normalement aucun état d’instance sauvegardé, mais le framework android fait en sorte cette.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X