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.