Sobes.tech
Junior

O que é um Handler no Android?

sobes.tech IA

Resposta da IA

Um Handler no Android é um mecanismo para interação entre threads. Permite enviar e processar Message e Runnable de um thread para a fila de mensagens (MessageQueue) de outro thread (geralmente o thread de UI).

Componentes principais:

  • Handler: Objeto associado a um thread específico e à sua MessageQueue. Envia mensagens e Runnable para a fila, e também as processa ao extraí-las.
  • Looper: Objeto ligado a um thread. "Inicia" o thread, extraindo continuamente tarefas (Message ou Runnable) da MessageQueue e passando-as ao Handler correspondente para processamento.
  • MessageQueue: Fila de tarefas (Message ou Runnable) aguardando processamento pelo Looper.

Como funciona:

  1. O Handler é criado no thread que irá processar as mensagens (por exemplo, o thread de UI).
  2. Este Handler está associado ao Looper desse thread e à sua MessageQueue.
  3. De outro thread (por exemplo, em background), é possível enviar mensagens ou Runnables para a MessageQueue através dos métodos do Handler (por exemplo, post ou sendMessage).
  4. O Looper do thread receptor extrai tarefas da MessageQueue.
  5. O Looper passa cada tarefa ao Handler correspondente para processamento.

Exemplo de uso para atualizar a UI a partir de um thread em background:

// Criação de Handler no thread de UI
Handler uiHandler = new Handler(Looper.getMainLooper());

// Em um thread em background:
new Thread(new Runnable() {
    @Override
    public void run() {
        // Realizar operação longa...

        // Atualizar a UI via Handler
        uiHandler.post(new Runnable() {
            @Override
            public void run() {
                // Código aqui que atualiza a UI de forma segura
                textView.setText("Operação concluída!");
            }
        });
    }
}).start();

Handler é usado para realizar operações de forma segura em um thread específico (geralmente a UI) sem bloquear o thread principal. Isso é necessário porque a maioria das operações com a UI devem ser feitas apenas no thread principal.