Qual é a diferença entre Serviço, Tarefa assíncrona e thread. Se não estou errado, todos eles são usados para fazer algumas coisas em segundo plano. Então, como decidir qual usar e quando?
Qual é a diferença entre Serviço, Tarefa assíncrona e thread. Se não estou errado, todos eles são usados para fazer algumas coisas em segundo plano. Então, como decidir qual usar e quando?
Respostas:
Provavelmente você já leu a descrição da documentação sobre eles, não vou repeti-los. Em vez disso, tentarei responder com minhas próprias palavras, espero que eles o ajudem.
O serviço é como uma atividade, mas não possui interface com o usuário. Provavelmente, se você quiser buscar o clima, por exemplo, não criará uma atividade em branco para isso; por isso, usará um Serviço.
Um Thread é um Thread, provavelmente você já o conhece de outra parte. Você precisa saber que não pode atualizar a interface do usuário a partir de um thread. Você precisa usar um manipulador para isso, mas leia mais.
Um AsyncTask é um encadeamento inteligente recomendado para uso. Inteligente, pois pode ajudar com seus métodos, e existem três métodos que são executados no thread da interface do usuário, o que é bom para atualizar os componentes da interface do usuário.
Estou usando Serviços, AsyncTasks frequentemente. Thread menos, ou não, como eu posso fazer quase tudo com AsyncTask.
Esta é a resposta mais fácil para sua pergunta
Fio
é uma unidade de execução que executa "paralelamente" ao Thread principal é um ponto importante, não é possível atualizar um componente da interface do usuário a partir de qualquer thread aqui, exceto o thread principal.
AsyncTask
é um encadeamento especial, que fornece métodos auxiliares para atualizar a interface do usuário; portanto, você pode atualizar a interface do usuário, mesmo que o AsyncTask seja executado em um encadeamento em segundo plano. A manipulação de comunicação entre processos não precisa ser feita explicitamente.
Serviço
resolva o problema acima porque ele vive separado da atividade que a invoca, para poder continuar em execução mesmo quando a atividade é destruída; ela é executada no Thread Principal (cuidado com o ANR) usa um serviço em segundo plano (estenda IntentService, crie automaticamente o thread de trabalho para você) . O serviço é como uma atividade sem interface do usuário , é bom para tarefas longas
Mais algumas informações que eu gostaria que alguém tivesse me contado há alguns dias:
Meu caso de uso é o seguinte: tenho um encadeamento no espaço global conectado a um servidor e uma atividade que mostra os resultados. Quando o usuário pressiona o botão home, a Atividade fica em segundo plano e um novo Serviço é iniciado. Este serviço lê os resultados do encadeamento e exibe informações na área de notificação quando necessário. Não me preocupo com o SO que destrói minha Atividade, porque sei que, enquanto o Serviço estiver em execução, ele destruirá o encadeamento.
Da perspectiva do desenvolvedor:
Thread : Usado para executar o conjunto de códigos paralelamente ao thread principal. Mas você não pode manipular a interface do usuário dentro do thread. Para isso você precisa usar Handler
. Hadler funciona como um thread, mas também pode lidar com a interface do usuário.
ASyncTask : Usado para lidar com as tarefas que você não pode executar para trabalhar no thread principal. Por exemplo, uma solicitação HTTP é um trabalho muito pesado que não pode ser manipulado no encadeamento principal; portanto, você lida com a solicitação HTTP no modo ASyncTask
Funciona paralelamente ao seu encadeamento principal de forma assíncrona em segundo plano. eventos.
Serviço : é um processo em segundo plano. É empregado quando você precisa executar algum processamento que não possui nenhuma interface de usuário associada.
Service
não será necessário executar em segundo plano, a menos que você use IntentService
. Se você iniciou um padrão Service
no UiThread, ele será executado no UiThread.
Service
não será executado em um processo diferente por padrão, mas no processo do aplicativo com os outros componentes. Melhor dizer que Service
será executado no plano de fundo do segmento em que ele vive.