DEV Community

Alexandre Freire
Alexandre Freire

Posted on • Edited on

1

Handler, Thread e AsyncTask

Thread

Um thread é uma linha de execução de código dentro de um aplicativo. Um aplicativo pode ter vários threads em execução num mesmo momento. Em outras palavras, threads permitem a um aplicativo ter comportamento multitarefa. No Java, a classe Thread é uma representação de um thread da Máquina Virtual Java ou JVM (que não necessariamente corresponde a um thread do sistema operacional hospedeiro, mas isso não vem ao caso).

Handlers e Threads

Para a diferença entre Handler e Thread, veja esta pergunta. Note que Handlers não são Threads; Handlers têm esse nome porque servem para entregar mensagens (uma mensagem ou Message é basicamente o encapsulamento de um Runnable, isto é, um trecho de código executável) para threads que ficam em loop aguardando a chegada desses trechos de código para executar.

Para um thread ficar em loop, é preciso criar uma fila de mensagens para ele chamando os métodos Looper.prepare() e Looper.loop() dentro do próprio thread. No caso do thread principal o próprio sistema já faz esses passos, de forma que já o encontramos em loop por padrão.

Usamos um Handler quando queremos que um thread secundário execute muitas mensagens, ou quando queremos entregar uma mensagem ao thread principal. Neste último caso podemos evitar o uso do Handler através do método Activity.runOnUiThread() (caso estejamos em uma Activity), ou através de uma AsyncTask.

AsyncTasks

Uma AsyncTask é uma classe que permite executar três trechos de código em sequência: o primeiro será executado pelo thread principal (thread de UI), o segundo por um thread secundário, e o terceiro de novo pelo thread principal. Por debaixo dos planos isso é implementado usando Threads e Handlers.

AsyncTasks têm a intenção de simplificar a implementação dessa sequência de passos, que é muito comum de acontecer no Android (por exemplo: disparar uma animação de “carregando”, executar uma tarefa em segundo plano, e então interromper a animação).

Essa sequência é feita assim, separada em threads e não tudo no mesmo thread, porque o threadprincipal é reservado para atualizar a tela e não pode executar tarefas em segundo plano sob pena de perder a responsividade.

Créditos: piovezan

AWS Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay