Eine kurze Beschreibung des Handler-Mechanismus

java - minimalistischer Handler-Mechanismus

Was der Handler-Mechanismus tun muss :

  1. Fügen Sie eine Reihe von Nachrichten aus allen Richtungen zu einer Warteschlange hinzu, diese Warteschlange ist MessageQueue.

  2. Entnehmen Sie die Nachricht am Kopf der MessageQueue und verwenden Sie den mit der Nachricht gelieferten Handler, um die Nachricht zu verarbeiten.

Eine kleine Besonderheit ist, dass der Handler diese beiden Dinge zur Verarbeitung in zwei Threads aufteilt, wodurch sichergestellt wird, dass der Server msg2 in die Warteschlange einreihen kann, während er msg1 verarbeitet.

Message.java stellt also den Knoten in der verketteten Warteschlange MessageQueue dar. Insbesondere muss es neben der Speicherung grundlegender Informationen auch einen Handler speichern, damit der Thread, der die Nachricht verarbeitet, weiß, wie er die Nachricht verarbeiten soll.

Message.java und MessageQueue.java werden oben erwähnt, gefolgt von Handler.java und Looper.java.

Handler.java :

  Ein Tool zum Verarbeiten von Nachrichten, es hat zwei Methoden: sendMessage() und handleMessage(), die beiden oben erwähnten Dinge werden jeweils mit diesen beiden Methoden ausgeführt.

  Zu beachten ist, dass im Handler eine MessageQueue gespeichert ist und diese mq mit der mq im Looper verknüpft ist, dh die beiden mq teilen sich eine Speichereinheit. So erreichen Sie dies: Der Konstruktor des Handlers muss einen Looper übergeben, und der Handler zeigt während der Initialisierung das mq des Handlers auf das mq des Loopers.

Looper.java:

  Das Ding ist etwas abstrakt: Um eine Metapher zu machen: Message ist ein Hähnchenschenkel, MessageQueue ist ein Kühlschrank und Handler besteht aus zwei Aktionen: das Hähnchenschenkel in den Kühlschrank legen, das Hähnchenschenkel herausnehmen und essen. Aus dieser Sicht scheint es, dass ich mit den oben genannten drei Programmen die Hähnchenschenkel in den Kühlschrank stellen und zum Essen herausnehmen kann, also warum brauche ich einen Looper?

  Was Looper hier macht, muss als sehr gefühlvoll bezeichnet werden, da gibt es zwei Punkte:

    1. Es speichert das Wichtigste: mq, das heißt, der Looper weiß, wo sich der Kühlschrank befindet, und sagt sogar, dass der Kühlschrank vom Looper erstellt wurde.

    2. loop() ist eine Endlosschleife, in der zwei Aktionen kontinuierlich ausgeführt werden: Hähnchenschenkel herausnehmen und essen. Das ist die zweite Sache, die der oben erwähnte Handler-Mechanismus tut: Nachrichten aus der Warteschlange nehmen und verarbeiten.

  Also, wenn es keinen Looper gibt, weiß ich nicht einmal, wo der Kühlschrank mit Hähnchenschenkeln ist. Ich kann zwar Hähnchenschenkel nehmen und essen, aber ich weiß nicht, wie das geht. Ohne Looper bin ich nur ein bisschen Typ, der keine Hähnchenschenkel essen kann Erbärmlich!

  Der Thread des Einreihens von Nachrichten: Die Aktion des kontinuierlichen Einreihens von Nachrichten, jede Nachricht kommt mit einem Ziel: Handler, also wird sie in die mq dieses Handlers gestellt, und der Handler zeigt seine mq auf den Looper, wenn er mq in initialisiert wird

  Der Thread, der die Nachricht verlässt und die Nachricht verarbeitet: Dieser Thread ruft loop() auf und nimmt weiterhin das Kopfelement der Warteschlange aus mq heraus. Diese mq ist genau die mq, die im Looper gespeichert ist, auf die der Handler zeigt im Message-Enqueuing-Thread mq.

Auf diese Weise führen zwei Threads gleichzeitig verschiedene Aktionen auf demselben mq aus.

おすすめ

転載: blog.csdn.net/hanshilong100/article/details/120033659
おすすめ