Uma breve descrição do mecanismo do manipulador

java - mecanismo manipulador minimalista

O que o mecanismo do manipulador deve fazer :

  1. Adicione várias mensagens de todas as direções a uma fila, essa fila é MessageQueue.

  2. Retire a mensagem no cabeçalho de MessageQueue e use o manipulador que vem com a mensagem para manipulá-la.

Um pouco especial é que o manipulador divide essas duas coisas em dois threads para processamento, o que garante que o servidor possa enfileirar msg2 enquanto processa msg1.

Então Message.java é o Node na fila encadeada MessageQueue, em particular, além de armazenar informações básicas, ele também precisa salvar um Handler, para que a thread que processa a mensagem saiba como processar a mensagem.

Message.java e MessageQueue.java são mencionados acima, seguidos por Handler.java e Looper.java.

Handler.java

  Uma ferramenta para processamento de msg, possui dois métodos: sendMessage() e handleMessage(), as duas coisas mencionadas acima são feitas com esses dois métodos respectivamente.

  Vale ressaltar que no Handler está armazenado um MessageQueue, e este mq está associado ao mq no Looper, ou seja, os dois mqs compartilham uma unidade de memória. Como conseguir isso: o construtor do handler precisa passar em um Looper, e o handler aponta o mq do handler para o mq do looper durante a inicialização.

Looper.java:

  Essa coisa é um pouco abstrata. Para fazer uma metáfora, Message é uma coxa de frango, MessageQueue é uma geladeira e Handler são duas ações: colocar a coxa de frango na geladeira, tirar a coxa de frango e comê-la. Desse ponto de vista, com os três programas acima, parece que posso colocar as coxas de frango na geladeira e levá-las para comer, então por que preciso de um looper?

  O que o looper faz aqui deve ser considerado muito emocionante. Há dois pontos:

    1. Salva o mais importante: mq, ou seja, o looper sabe onde está a geladeira, e ainda diz que a geladeira foi criada pelo looper.

    2. loop() é um loop infinito, no qual duas ações são executadas continuamente: retirar as coxas de frango e comê-las. Essa é a segunda coisa que o mecanismo do manipulador mencionado acima faz: desenfileirar e processar mensagens.

  Então, se não tem lagarta, eu nem sei onde fica a geladeira com coxas de frango. Embora eu possa pegar e comer coxas de frango, não sei como fazer. Sem lagartixa, sou apenas um pouco cara que não pode comer coxas de frango Lamentável!

  O thread de enfileiramento de mensagens: a ação de enfileirar mensagens continuamente, cada msg vem com um alvo: manipulador, então ele é colocado no mq deste manipulador, e o manipulador aponta seu mq para o looper quando é inicializado mq em

  A thread que deixa a mensagem e a processa: esta thread chama loop(), e continua retirando o elemento head da fila do mq. Este mq é exatamente o mq salvo no looper, que é aquele apontado pelo manipulador no segmento de enfileiramento de mensagens mq.

Dessa forma, duas threads executam ações diferentes no mesmo mq ao ​​mesmo tempo.

Acho que você gosta

Origin blog.csdn.net/hanshilong100/article/details/120033659
Recomendado
Clasificación