Une brève description du mécanisme du gestionnaire

java - mécanisme de gestionnaire minimaliste

Ce que le mécanisme du gestionnaire doit faire :

  1. Ajoutez un groupe de messages de toutes les directions à une file d'attente, cette file d'attente est MessageQueue.

  2. Sortez le message en tête de MessageQueue et utilisez le gestionnaire fourni avec le message pour gérer le Message.

Une petite particularité est que le gestionnaire divise ces deux éléments en deux threads pour le traitement, ce qui garantit que le serveur peut mettre msg2 en file d'attente pendant le traitement de msg1.

Message.java est donc le nœud de la file d'attente chaînée MessageQueue.En particulier, en plus de stocker des informations de base, il doit également enregistrer un gestionnaire, afin que le thread qui traite le message sache comment traiter le message.

Message.java et MessageQueue.java sont mentionnés ci-dessus, suivis de Handler.java et Looper.java.

Gestionnaire.java

  Un outil de traitement de msg, il a deux méthodes : sendMessage() et handleMessage(), les deux choses mentionnées ci-dessus sont faites avec ces deux méthodes respectivement.

  A noter qu'une MessageQueue est stockée dans le Handler, et que cette mq est associée à la mq dans le Looper, c'est-à-dire que les deux mq partagent une unité mémoire. Comment y parvenir : le constructeur du gestionnaire doit passer un Looper, et le gestionnaire pointe le mq du gestionnaire vers le mq du looper lors de l'initialisation.

Boucleur.java:

  Cette chose est un peu abstraite. Pour faire une métaphore, Message est une cuisse de poulet, MessageQueue est un réfrigérateur et Handler est deux actions : mettre la cuisse de poulet dans le réfrigérateur ; sortir la cuisse de poulet et la manger. De ce point de vue, avec les trois programmes ci-dessus, il semble que je puisse mettre les cuisses de poulet au réfrigérateur et les sortir pour manger, alors pourquoi ai-je besoin d'un looper ?

  Ce que fait looper ici devrait être dit très émouvant, il y a deux points :

    1. Il enregistre la chose la plus importante : mq, c'est-à-dire que le looper sait où se trouve le réfrigérateur et dit même que le réfrigérateur a été créé par le looper.

    2. loop() est une boucle infinie, dans laquelle deux actions sont exécutées en continu : sortir les cuisses de poulet et les manger. C'est la deuxième chose que fait le mécanisme de gestionnaire mentionné ci-dessus : retirer et traiter les messages.

  Donc, s'il n'y a pas de looper, je ne sais même pas où se trouve le réfrigérateur avec des cuisses de poulet. Bien que je puisse prendre et manger des cuisses de poulet, je ne sais pas comment faire. Sans looper, je suis juste un peu gars qui ne peut pas manger de cuisses de poulet Pitoyable !

  Le fil de la mise en file d'attente des messages : l'action de mettre les messages en file d'attente en continu, chaque msg est livré avec une cible : gestionnaire, il est donc placé dans le mq de ce gestionnaire, et le gestionnaire pointe son mq vers le looper lorsqu'il est initialisé mq dans

  Le thread qui laisse le message et traite le message : ce thread appelle loop() et continue de retirer l'élément de tête de file d'attente du mq. Ce mq est exactement le mq enregistré dans le looper, qui est celui pointé par le gestionnaire dans le message mise en file d'attente thread mq.

De cette façon, deux threads effectuent des actions différentes sur le même mq en même temps.

Je suppose que tu aimes

Origine blog.csdn.net/hanshilong100/article/details/120033659
conseillé
Classement