Nous allons étudier dans ce cours comment fonctionne le cycle de vie d'une activité. C'est un sujet très important que tout développeur Android doit savoir maîtriser. Non, je ne vous mets pas la pression. Et de toute façon, comme le disait Desproges : la pression, je préfère la boire plutôt que la subir.
Description
Lorsque votre réveil sonne le matin, vous passez de l'état endormi à l'état réveillé. Ensuite, lorsque vous vous levez puis vous préparez à aller travailler, vous passez de l'état réveillé à opérationnel. Tout au long de la journée, vous passez d'un état à l'autre.
Sous Android, une activité passe également par différents états. Entre deux états, le système appelle certaines méthodes bien spécifiques, dans un ordre déterminé. Vous connaissez déjà une de ces méthodes : onCreate().
Voici les différents états dans lesquels une activité peut se trouver :

Par défaut, la méthode onCreate() est automatiquement surchargée lorsque vous créez une nouvelle activité. Mais comme vous pouvez le voir sur le diagramme ci-dessus, il en existe d'autres, que nous allons découvrir maintenant.
La méthode onCreate()
Cette méthode, que vous connaissez déjà, est appelée lorsque votre activité est créée par le système, et qu'elle entre dans l'état Created.
Généralement, les opérations effectuées dans cette méthode servent à mettre en place l'interface graphique, à initialiser les variables, à configurer les listeners ou à se connecter au modèle.
Vous aurez noté que cette méthode prend en paramètre une variable savedInstanceState de type Bundle. Cette variable contient le dernier état sauvegardé de l'activité. Si c’est la première fois que cette Activity est lancée, la variable est nulle. Sinon, alors le paramètre savedInstanceState sera présent ! Ne vous inquiétez pas si vous ne comprenez pas, vous en saurez plus un peu plus bas !
À ce stade, l'activité est créée, mais l'utilisateur ne la voit pas encore et ne peut pas interagir avec.
La méthode onStart()
Cette méthode est appelée par le système lorsque l'activité entre dans l'état Started. L'interface graphique devient visible à l'utilisateur, mais il ne peut pas encore interagir avec les différents éléments.
La méthode onResume()
Cette méthode est appelée lorsque l'activité entre dans l'état Resumed. L'activité devient entièrement opérationnelle. L'utilisateur peut utiliser l'application et cliquer sur les différents éléments graphiques.
L'application reste dans cet état tant qu'il n'y a pas d'interruption, comme par exemple la réception d'un appel téléphonique, le démarrage d'une nouvelle activité ou l'affichage d'une boîte de dialogue.
La méthode onPause()
Cette méthode est appelée lorsque l'activité entre dans l'état Paused. Une Activity passe par exemple dans l’état Paused lorsqu’une AlertDialog est affichée : l’Activity sous-jacente est toujours visible, mais elle n’est pas au premier plan. Cette méthode est “l’inverse” de la méthode onResume() : tout ce qui est initié dans onResume() doit être mis en pause dans cette méthode. Par exemple, une animation présentée à l'utilisateur est démarrée dans onResume() puis stoppée dans onPause().
Les traitements effectués dans cette méthode doivent être les plus courts possibles.
La méthode onStop()
Cette méthode est appelée lorsque l'activité entre dans l'état Stopped. Par exemple, lorsqu'une nouvelle activité est démarrée, l'activité appelante va se retrouver dans cet état. Elle n'est donc plus du tout visible à l'utilisateur. Les traitements liés à la mise à jour de l'interface graphique peuvent être arrêtés.
Les traitements effectués dans cette méthode peuvent être plus importants (comme sauvegarder certaines valeurs dans les SharedPreferences, par exemple).
La méthode onDestroy()
Cette méthode est appelée lorsque l'activité est arrêtée. Par exemple, ce peut être après avoir appelée la méthode finish(), ou si le système décide d'arrêter l'activité pour libérer de la mémoire.
Séchez vos larmes, c'est normal. La première fois, cela effraie toujours un peu. Nous allons mettre tout cela en pratique et vous irez tout de suite mieux.
Mise en application
Pour bien comprendre l'enchaînement des méthodes, je vous invite à toutes les surcharger (sauf onCreate() qui l'est déjà) dans vos deux activités, et d'afficher leur appel dans la console. Pour rappel, l'affichage d'une trace en Android s'effectue de la sorte :
Log.d(TAG, "onStart() called");
Comme TAG, vous pouvez utiliser ce que vous voulez. Personnellement, j’utilise mon prénom le retrouver facilement plus tard dans le LogCat !
Lancez l'application, appuyez sur le bouton pour démarrer une nouvelle partie, jouez-la jusqu'à la fin et attendez de revenir sur l'écran principal. Vous devriez obtenir :

Pour avoir un affichage similaire, veillez à :
Sélectionner l'onglet Logcat en bas à gauche d'Android Studio.
Sélectionner le nom de l'émulateur si vous testez sur l'émulateur, ou le nom de votre équipement si vous testez sur un téléphone ou une tablette.
Sélectionner le nom du processus (par défaut, c’est votre nom de package !).
Filtrer l'affichage des traces en tapant votre tag ou un contenu du log dans la zone de recherche. Cela vous évitera d'être pollué par l'ensemble des traces générées par le système.
Du côté de MainActivity, nous avons :
onCreate() / onStart() / onResume() : l'activité est démarrée ;
onPause() : l'activité est en pause, car l'activité GameActivity va être démarrée ;
onStop() : l'activité est stoppée, car c'est l'activité GameActivity qui est au premier plan ;
onStart() / onResume() : l'activité reprend, car l'activité GameActivity est terminée.
Du côté de GameActivity, nous avons :
onCreate() / onStart() / onResume() : l'activité est démarrée ;
onPause() / onStop() / onDestroy() : l'activité se termine puis est détruite.
En résumé
Sous Android, une activité passe par différents états.
Entre chaque état, le système appelle certaines méthodes bien spécifiques, dans un ordre déterminé.
Par défaut, la méthode onCreate() est automatiquement surchargée lorsque vous créez une nouvelle activité.
Plus vos applications grandiront, plus vous devrez maîtriser ce cycle sur le bout des doigts afin de déterminer dans quelle méthode effectuer le démarrage et l'arrêt de vos services. Et maintenant, suivez-moi dans le dernier chapitre de ce cours pour découvrir ce qu'il se passe lorsque vous tournez votre équipement... 😱