L'OS Android est un endroit dangereux pour une activité. La demande de ressources sur une plate-forme à piles est gérée sans pitié par le système. Nos activités peuvent être sauvegardées à partir de la mémoire quand elle est faible, sans même un préavis et avec toutes les données qu'elles contiennent. Par conséquent, il est essentiel de comprendre le cycle de vie de l'activité.
Le diagramme suivant montre les étapes à travers lesquelles une activité passe pendant sa durée de vie:
Avec les étapes, le diagramme montre également les méthodes qui peuvent être surchargées. Comme vous pouvez le voir, nous avons déjà utilisé la plupart de ces méthodes dans les recettes précédentes. Espérons que l'obtention d'une vue d'ensemble aidera votre compréhension.
-d0}
Se préparer
Créez un nouveau projet dans Android Studio avec une activité vierge et appelez-le ActivityLifecycle. Nous utiliserons la méthode Textview (autogénérée) pour afficher les informations d'état.


Comment faire...
Pour voir l'application passer à travers les différentes étapes, nous allons créer des méthodes pour toutes les étapes:
1. Ouvrez activity_main.xml et ajoutez un ID au TextView autogénéré: android: id = "@ + id / textViewState"
2. Les étapes restantes seront dans MainActivity.java. Ajoutez la déclaration globale suivante:
private TextView mTextViewState;
3. Modifiez la méthode onCreate () pour enregistrer TextView et définir le texte initial:
mTextViewState = (TextView) findViewById (R.id.textViewState);
mTextViewState.setText ("onCreate () \ n");
4. Ajoutez les méthodes suivantes pour gérer les événements restants:
@Passer outre
void protégé onStart () {super.onStart ();
mTextViewState.append ("onStart () \ n");
}
@Passer outre
void protégé onResume () {super.onResume ();
mTextViewState.append ("onResume () \ n");
}
@Passer outre
void protégé onPause () {super.onPause ();
mTextViewState.append ("onPause () \ n");
}
@Passer outre

void protégé onStop () {super.onStop ();
mTextViewState.append ("onStop () \ n");
}
@Passer outre
void protégé onRestart () {super.onRestart ();
mTextViewState.append ("onRestart () \ n");
}
@Passer outre
void protégé onDestroy () {super.onDestroy ();
mTextViewState.append ("onDestroy () \ n");
}
5. Exécutez l'application et observez ce qui se passe lorsque l'activité est interrompue en appuyant sur les touches Retour et Accueil. Essayez d'autres actions, telles que le changement de tâche, pour voir leur impact sur votre application.


Comment ça marche...
Notre activité peut exister dans l'un de ces trois états: actif, en pause ou arrêté. Il y a aussi un quatrième état, détruit, mais nous pouvons l'ignorer en toute sécurité:
► Une activité est dans l'état actif lorsque son interface est disponible pour l'utilisateur. Il persiste de onResume () jusqu'à onPause (), ce qui se produit lorsqu'une autre activité vient au premier plan. Si cette nouvelle activité n'obscurcit pas entièrement notre activité, alors la nôtre restera dans l'état de pause jusqu'à ce que la nouvelle activité soit terminée ou rejetée. Il appellera immédiatement onResume () et continuera.
► Lorsqu'une activité nouvellement lancée remplit l'écran ou rend invisible notre activité, alors notre activité passe à l'état arrêté et la reprise appelle toujours un appel à onRestart ().
► Lorsqu'une activité est en état de pause ou d'arrêt, le système d'exploitation peut (et va) le retirer de la mémoire lorsque la mémoire est faible ou lorsque d'autres applications l'exigent.
-cm
► Il est à noter que nous ne voyons jamais réellement les résultats de la méthode onDestroy (), car l'activité est supprimée par ce point. Si vous souhaitez explorer ces méthodes, il vaut la peine d'utiliser Activity.isFinishing () pour voir si l'activité se termine réellement avant l'exécution de onDestroy (), comme le montre l'extrait suivant:
@Passer outre
public void onPause () {super.onPause ();
mTextView.append ("onPause () \ n"); if (isFinishing ()) {
mTextView.append ("... finish");
}
}
Lors de l'implémentation de ces méthodes, appelez toujours la superclasse avant d'effectuer un travail.
Il y a plus...


Arrêt d'une activité
Pour arrêter une activité, appelez directement sa méthode finish (), qui à son tour appelle onDestroy (). Pour effectuer la même action à partir d'une activité enfant, utilisez finishFromChild (Activity child), où child est la sous-activité d'appel.
Il est souvent utile de savoir si une activité est en cours d'arrêt ou simplement en pause, et la méthode isFinishing (boolean) renvoie une valeur qui indique dans lequel de ces deux états se trouve l'activité.