Est-il normal pour la méthode « activity.onCreate () » pour être appelé plusieurs fois
Question
J'ai un code dans la méthode onCreate Une activité et a remarqué qu'il est appelé trois fois. Est-ce un comportement normal? Merci.
La solution
Vous pouvez lire la documentation sur le .
OnCreate ne sera appelée une fois pour chaque durée de l'activité. Cependant, il y a un certain nombre de situations qui peuvent causer votre activité à tuer et ramené à la vie. Ainsi, onCreate sera appelée à nouveau.
Pour soutenir cela correctement, vous pouvez enregistrer des informations d'état dans onSaveInstanceState et restaurer Fron l'état paquet que vous obtenez dans le créer.
Autres conseils
Outre les cas prévus, je constate que seules les activités (onCreate) sont appelés deux fois qui créent de nouveaux fil ou Runnable. (Je crois que ce bogue dans Android).
La solution est simple (si vous ne pouvez pas comme ça: p)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
if(savedInstanceState == null){
// everything else that doesn't update UI
}
}
Vous pouvez également gérer les changements de configuration sur votre propre, la mise sur le AndroidManifest la déclaration suivante, dans la configuration d'activité:
android:configChanges="orientation|keyboardHidden"
Pour plus d'informations, vous pouvez consulter le documentation officielle
Le dessous est un scénario que j'ai rencontré (et résolu) qui produit le comportement que vous décrivez:
Il y a 3 événements qui déclenchera OnTouch -. 1. 2. android.view.MotionEvent.ACTION_UP android.view.MotionEvent.ACTION_DOWN 3. android.view.MotionEvent.ACTION_MOVE
Souvent, tous les trois de ces événements se déclenchent en même temps pour déclencher l'auditeur OnTouch. Lorsque cet écouteur est utilisé pour lancer une activité (via une intention passée à startActivity ()), vous pouvez reproduire ce comportement qui remettrait OnCreate sur les multiples temps d'activité (3 dans cet exemple).
Si ce n'est pas ce type d'écouteur que vous utilisez pour démarrer l'activité, vous pouvez regarder dans la documentation de tout auditeur déclenche votre activité pour voir si vous rencontrez un scénario similaire. Les chances sont que non seulement un événement déclenche l'auditeur.
J'ai eu un problème similaire, il a été causé par MobileAds.
Après que je les initialisés super.onCreate(...)
avant que le problème a disparu.