J'ai créé un projet d'application Android et dans MainActivity.java> onCreate()
il appelle super.onCreate(savedInstanceState)
.
En tant que débutant, quelqu'un peut-il expliquer quel est le but de la ligne ci-dessus?
Réponses:
Chaque activité que vous effectuez est démarrée par une séquence d'appels de méthode. onCreate()
est le premier de ces appels.
Chacune de vos activités s'étend android.app.Activity
soit directement, soit en sous-classant une autre sous-classe de Activity
.
En Java, lorsque vous héritez d'une classe, vous pouvez remplacer ses méthodes pour y exécuter votre propre code. Un exemple très courant de ceci est le remplacement de la toString()
méthode lors de l'extension java.lang.Object
.
Lorsque nous surchargons une méthode, nous avons la possibilité de remplacer complètement la méthode dans notre classe, ou d'étendre la méthode de la classe parent existante. En appelant super.onCreate(savedInstanceState);
, vous dites à la VM Dalvik d'exécuter votre code en plus du code existant dans le onCreate () de la classe parent. Si vous omettez cette ligne, seul 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 ne le faites pas, le onCreate()
code Activity
n'est jamais exécuté et votre application rencontrera toutes sortes de problèmes, comme le fait de ne pas avoir de contexte attribué à l'activité (bien que vous frappiez a SuperNotCalledException
avant d'avoir une chance de comprendre que vous n'avez pas de contexte).
En bref, les propres classes d'Android peuvent être incroyablement complexes. Le code dans les classes de structure gère des éléments tels que le dessin de l'interface utilisateur, le nettoyage de la maison et la maintenance des cycles de vie d'activité et d'application. super
Les appels permettent aux développeurs d'exécuter ce code complexe dans les coulisses, tout en fournissant un bon niveau d'abstraction pour nos propres applications.
* La onCreate(bundle)
méthode de classe dérivée doit appeler l'implémentation de superclasse de cette méthode. Il lèvera une exception SuperNotCalledException si le mot clé " super " n'est pas utilisé.
Pour l'héritage dans Java
, pour remplacer la méthode de la superclasse et également pour exécuter la méthode de classe ci-dessus, utilisez super.methodname()
dans la méthode de classe dérivée de substitution ;
La classe Android fonctionne de la même manière. En étendant la Activity
classe qui a la onCreate(Bundle bundle)
méthode dans laquelle du code significatif est écrit et pour exécuter ce code dans l'activité définie, utilisez le mot clé super avec la méthode onCreate () like super.onCreate(bundle)
.
Il s'agit d'un code écrit dans la onCreate()
méthode de classe Activity et l'équipe de développement Android pourrait ajouter du code plus significatif à cette méthode plus tard. Ainsi, afin de refléter les ajouts, vous êtes censé appeler le super.onCreate () 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;
/**
* 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.
*/
Il gère également la variable, mCalled
ce qui signifie que vous avez appelé le 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.
Parce que sur super.onCreate (), il atteindra la classe Activity (classe parente de toute activité) pour charger le savedInstanceState, et nous ne définissons normalement aucun état d'instance enregistré, mais le framework Android fait de telle manière que nous devrions appeler cette.
super.onCreate(savedInstanceState)
, sauf si vous avez une autre erreur
Ce sont des informations que vous souhaitez renvoyer à votre application, via onCreate (), si l'activité est détruite et redémarrée pour une raison implicite (par exemple, pas parce que l'utilisateur a appuyé sur le bouton retour). L'utilisation la plus courante de onSaveInstanceState () est de gérer les rotations d'écran, car par défaut, les activités sont détruites et recréées lorsque l'utilisateur fait glisser le clavier G1.
La raison d'appeler super.onCreate (savedInstanceState) est que votre code ne se compilera pas autrement. ;-)