Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

Android : L'interaction avec les appareils

Exploiter les bus d'évènements

Testez gratuitement nos 1336 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Tirez parti de la puissance d'un bus d'évènements et simplifiez la communication entre les éléments. Suivez un exemple d'implémentation avec la librairie Otto et saisissez l'utilité de la classe application.
08:36

Transcription

Dans cette vidéo, je vais vous présenter une librairie qui implémente un bus d'événements, à savoir Otto. Otto a été développé par Square, qui a aussi développé OkHttp, Picasso et Retrofit que vous avez pu voir dans d'autres formations ANDROID de notre catalogue. Pour vous présenter le bus d'événements Otto, je vais faire en sorte que notre service communique avec notre activité, mais cette fois-ci, en utilisant un bus d'événements au lieu du bind service. Pour cela, j'ai créé un nouveau module que j'ai appelé serviceetotto. Mon fichier activity_main.xml, il a deux boutons, un textview. La version activity ne possède que des pointeurs vers les composants graphiques, sait abonner au clic des boutons, lance et arrête le service. Mon service, lui, affiche dans la console Bonjour ou Bonsoir et gère le timer, rien de plus. Commençons par expliquer ce qu'est un bus d'événements. Un bus d'événements est simplement un objet dans lequel on va pouvoir poster des messages ou aller lire l'objet et voir les messages qui ont été postés au moment où ils ont été postés. C'est ce qui va nous servir à faire des callbacks. Première étape, ajouter la librairie d'Otto à notre projet dans le fichier gradle. Ensuite, pour stocker le bus, je vais vous présenter une nouvelle classe. Ici, nous avons une déclaration d'activité. Ici, nous avons une déclaration de notre service. Notre service est géré par la classe MyService. Cette activité est gérée par la classe MainActivity. Ici, nous avons Application. Il existe la même chose, on va pouvoir étendre l'application. Donc, je vais créer une nouvelle classe que je vais appeler MyApplication dont la super-classe sera la classe Application. Il m'a donc étendu l'application. Je vais donc maintenant ici à mon application pouvoir lui donner une redirection sur une classe, la classe que je viens de créer. Autant je peux avoir plusieurs activités, plusieurs services, plusieurs broadcasts, autant je n'ai qu'une application. Cette classe sera donc celle qui sera lancée au départ, c'est-à-dire qu'avant même que ma première activité soit lancée et affichée à l'écran, je serais passé dans la classe Application. La classe Application a une méthode onCreate, qui ne sera donc appelée qu'une seule fois. Ici, je vais pouvoir créer mon bus. Et je vais l'instancer dans le onCreate. Je vais déclarer mon bus static. Comme ça, je peux y accéder partout dans l'application et je n'ai besoin que d'un bus, donc inutile d'en faire une instance d'application, même si cela reviendra au même étant donné qu'il n'y aura qu'une instance d'application. Donc, c'est juste une simplification d'accès. Le résultat sera le même. D'ailleurs, si vous utilisez des librairies d'analytics, comme Google Analytics ou pour détecter les erreurs, comme Crashlytics, ils vont vous demander d'ajouter des morceaux de code dans la méthode onCreate justement pour initialiser leur librairie au démarrage de votre application. Il ne me reste plus qu'à faire le getter. Je peux maintenant accéder à mon bus en faisant MyApplication.get bus. Et je suis sûr qu'il existe puisque la première méthode qui est appelée sera la méthode onCreate. Commençons par la partie émetteur, c'est-à-dire le service qui va émettre le message. Je vais lui demander de récupérer le bus et de faire un post. Et je vais pouvoir lui poster n'importe quel objet. En l'occurrence ici, je vais lui poster un string qui représente notre message à afficher. Pour rappel, le timer est dans un thread à part, il n'est pas sur le UI thread. Otto fonctionne sur l'UI thread par défaut, c'est ce qui permet une certaine sécurité. Si on veut travailler en dehors de l'UI thread, il va falloir lui préciser en utilisant ThreadEnforcer.ANY pour lui préciser qu'on travaille sur tous les threads et pas uniquement sur l'UI thread. Sinon, vous aurez un message d'erreur dans la console vous indiquant que vous n'êtes pas sur l'UI thread. Mon service poste le message et c'est tout ce qu'il y a à faire. Du côté de mon émetteur, il se contente de poster dans mon bus. Côté MainActivity, il va falloir s'abonner au bus. Pour cela, je vais le faire dans la méthode onStart. Dans la méthode onStart, je vais récupérer mon bus et je vais faire un register qui va me permettre de m'abonner et je vais dire que je veux abonner l'instance d'activity, donc this. Mais ici, même pas d'interface à implémenter. Je suis abonné. Si je m'abonne, je dois me désabonner. Toujours le même principe, sinon j'ai une fuite mémoire. Le garbage collector ne pourra pas récupérer l'activité. Pour se désabonner, c'est unregister. Et toujours this. Ici, je m'abonne et je me désabonne dans onStart et onStop, c'est-à-dire avant que mon écran soit visible à l'écran. J'aurais très bien pu le faire dans onResume onPause ou dans onCreate onDestroy. Tout dépend si je veux rester abonner à mon bus, à mon activité mais pas l'activité à l'écran. Là, je suis abonné, maintenant, il va falloir lire ce bus. Pour lire ce bus, je vais commencer par écrire une méthode qui va afficher le message. Cette méthode, je vais lui donner un nom. Je vais l'appeler « affichermessage », qui prend un message. Je fais en sorte que si le message ne provient pas de l'UI thread, cela ne pose pas de problème. Je prends le message et je le mets au début de mon textview. Et maintenant, je vais devoir rediriger le bus dessus. Et pour cela, je vais utiliser la notation d'Otto @Subscribe. Attention à ne pas vous tromper, y'en a deux. Et c'est fini. Comment fonctionne Otto ? Au moment où il reçoit un message, il va parcourir toutes les classes qui se sont abonnées à lui. Il va faire un filtre sur toutes les méthodes de chaque classe et ne garder que celles qui ont @Subscribe. Et ensuite, il n'appellera que les méthodes qui ont comme typage de paramètre, donc ici string, le même typage que le paramètre envoyé. Donc ici, j'ai un paramètre affiché qui est de type string. Donc, il va appeler ma méthode tout seul. Bien sûr, cela ne marche que si je suis abonné. Il ne reste plus qu'à tester. J'ai donc mon activité, je démarre le service. Mon service est démarré. J'affiche ma console. Mon service est bien synchronisé. J'arrête mon service. Ça s'arrête donc tout fonctionne. Maintenant, je démarre le service. Je fais une rotation d'écran donc je vais me désabonner et revenir. Comme je me suis abonné directement en arrivant dans l'activité et que je n'ai pas utilisé un bouton pour m'abonner, je reprends le relais. Je redémarre le service. Je refais une rotation d'écran. Je reprends. Voilà pour l'utilisation d'Otto et d'un bus d'événements. Personnellement, Otto est une librairie que j'utilise beaucoup, car ici il m'a servi à communiquer entre un service et une activity sans avoir à faire tout le service de binding. Mais, on peut très bien l'utiliser entre notre adapteur et notre activité aussi. L'adapteur envoie l'élève qui a été cliqué et l'activité peut faire le traitement. Si vous utilisez un broadcast, on peut l'utiliser. Attention avec les broadcasts, ça fonctionne différemment dans le sens où l'activité n'est pas forcément lancée. Si vous avez déjà travaillé avec des fragments, c'est la même chose. On va pouvoir faire communiquer plusieurs fragments entre eux. Un premier fragment peut envoyer quelque chose dans le bus et il peut y avoir plusieurs éléments qui lisent le bus. Donc, on peut avoir plusieurs fragments qui se mettent à jour en fonction du premier fragment de ce qu'il a envoyé. Voilà, vous savez maintenant comment fonctionne le bus d'événements Otto.

Android : L'interaction avec les appareils

Exploitez les outils mis à disposition par le kit de développement Android. Améliorez l’expérience utilisateur de vos applications​ mobiles​ avec les composants et les animations.

1h58 (23 vidéos)
Aucun commentaire n´est disponible actuellement
 

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !