jeudi 20 février 2020

Le cycle de vie d'une Activity sous android



COMPRENDRE LE CYCLE DE VIE D’UNE ACTIVITE ANDROID


Le développement Android est basé sur un certain nombre de principes. Il convient de savoir ce qu’est une application Android, quelles sont ses composantes, Comment fonctionne-t-elle ?

Nous allons dans la suite utiliser indifféremment Activité et Activity. Ces deux mots désigneront la même chose dans la suite.

Une application Android est une application organisée sous forme de vues, et constitue un ensemble d’Activité ou « Activity ». L’on peut schématiser ou caricaturer une application Android par la description suivante :
  • (Au moins) une activité (Activity) principale
  • Une ou plusieurs activités secondaires
  • (Éventuellement) un ou plusieurs services
  •             ‘’              un ou plusieurs écouteurs d’évènements
  •             ‘’              un ou plusieurs éditeurs d’évènements
                                              1 - Alors qu’est-ce qu’une activité ?

Une Activité, au sens Android du terme est une interface graphique (XML) + un programme (Java, C# …). Une activité est la composante principale d'une application sous Android. L'activity est le métier de l'application et possède généralement une View (vue) au minimum, c'est-à-dire un écran graphique.


A côté des Activités nous avons les « Intents » (Nous y reviendront dans un prochain article) permettent de communiquer entre les différentes activités de notre application, mais aussi du téléphone.


Une Activity Android dispose d’un cycle de vie qui a pour but de rendre la gestion des ressources efficace. De ce fait, Android se réserve le droit de « tuer » une activité s’il n’y a pas suffisamment de ressources mémoire. Ainsi toute application ou activité Android se doit de respecter certaines règles inhérentes aux cycles de vie d’une activité mise en place par Google. D’où la nécessité pour les développeurs de connaitre le cycle de vie d’une activité au risque de voir son application marginalisée par le système.

                                               2 - Le cycle de vie d’une Activity ?

Sous Android, une activité passe par différents états induisant, entre chaque état, des appels de certaines méthodes bien spécifiques par le système, dans un ordre déterministe. Ces différentes étapes constituent donc le cycle de vie d’une activité Android.

Les différent(e)s étapes ou états par lesquels passent l’Activity sont au nombre de 7 :
  • onCreate()
  • onStart()
  • onResume() 
  • onPause()
  • onStop()
  • onRestart()
  • onDestroy()

Plusieurs représentations du cycle de vie d’une « Activity » Android existent. Ils ont tous le même sens. Nous allons en retenir deux pour illustrer nos propos : La représentation officielle selon Google et une autre représentation que j'ai bien aimé.


a) Le schéma officiel selon Google pour le projet Android :


Fig1. : Cycle de vie de l’activité (Activity) selon Google (https://developer.android.com/guide/components/activities/activity-lifecycle.html#alc) .

b) La représentation selon le site openclassrooms.com


Fig.2 : L’activité (Activity) dans tous ses états (https://openclassrooms.com/en/courses/4517166-developpez-votre-premiere-application-android/4586901-comprenez-le-cycle-de-vie-dune-activite)



Nous allons à présent définir le sens de chaque méthode indiquée dans les diagrammes susmentionnés.
  • onCreate() :
Cette méthode est appelée dès que notre Activity est créée par le système. Ainsi notre Activity entre dans l’état « Created ». C’est ici que sont chargés l’interface graphique, initialisation des variables … L’utilisateur n’y pas encore accès
  • onStart() :
Lorsque l’Activity est « Created », le système fait appelle à la méthode onStart() et met notre Activity dans l’état Started. Elle a donc démarré mais l’utilisateur ne peut pas encore interagir avec.
  • onResume() :
Après le démarrage de notre Activity (started), le système fait appel à la méthodes onResume() qui à son tour rend l’Activity entièrement opérationnelle. Elle est visible par l’utilisateur qui peut interagir avec les différents éléments graphiques. Cette Activity reste en l’état tant qu’elle n’est pas interrompue par une autre Activity (Notification, boite de Dialogue, appel entrant …). Dès notre application (Activity) passe à « Paused » et appelle onPause().
  • onPause() :
Une fois notre Activity est à « Paused », cette méthode est appelée. Tous les traitements de onResume() sont mis en pause c’est-à-dire par exemple, les connexions actives, les streaming encour, … Les traitements à effectuer ici doivent être le plus bref possible au risque de passer à onStop().
  • onStop() :
A la différence de la méthode onPause(), cette méthode est appelée quand notre Activity entre dans l’état « Stopped » et n’est plus visible par l’utilisateur. Les traitements qui s’y rattachent peuvent être arrêtés. C’est en général de cas de l’Activity appelante.
  • onRestart() :
Cette méthode permet de relancer l'activity en vue de lui passer la main et la mettre au premier plan.
  • onDestroy() :
La méthode onDestroy() est appelée dans deux cas :
    •  Soit le système décide de le faire lorsqu’il n’y a plus de ressources disponibles telle que « mémoire insuffisante », alors le système Kill ou Tue l’Activity ;
    • Soit l’utilisateur décide d’arrêter l’Activity en faisant appel la méthode finish().
L’autre alternative c’est que l’utilisateur relance l’application en faisant restarted avec onRestart().

Il ne nous reste plus que de la pratique… A la prochaine.