Qual é a diferença entre um serviço e um receptor de transmissão?

14

Eu continuo ouvindo sobre serviços e receptores de transmissão . Qual é a diferença entre eles e como eles afetam a operação do meu telefone Android do meu ponto de vista?

Dan Hulme
fonte
Você sabe, em vez de criar portas na camada TCP, sempre criamos receptores de transmissão para economizar bateria e muito processamento. Quando algum evento acontece no android ... a transmissão é enviada dentro do telefone para todos os aplicativos. E se você tiver um receptor de transmissão para esse evento escrito ,,, ele será automaticamente chamado. Tecnicamente, o evento aconteceu é chamado intenção em termos de android
Rahul Raina

Respostas:

27

Os aplicativos Android têm três tipos de componentes. Em geral, os usuários não precisam saber sobre eles: eles são uma maneira de os autores de aplicativos programarem comportamentos específicos em seus aplicativos. Mas se você estiver observando o comportamento de seus aplicativos de perto, como com um gerenciador de tarefas, ou se estiver automatizando coisas com um aplicativo como o Tasker, é útil entender como eles se encaixam no sistema.

Uma atividade é o tipo de componente mais familiar: é uma janela que você pode ver: em tela cheia ou em tamanho de diálogo. Uma atividade é executada apenas enquanto é exibida na tela. Depois de sair da atividade, o Android manterá o aplicativo na memória pronto para ser iniciado novamente, mas a atividade não será executada, o que significa que não usará bateria ou rede. Um aplicativo inicia uma atividade usando uma intenção . A intenção pode especificar explicitamente qual atividade iniciar, ou pode especificar uma ação a ser executada (como abrir um arquivo específico). Se mais de uma atividade puder "manipular" a intenção, você verá a caixa de diálogo pedindo para escolher uma.

Um serviço é outro componente do aplicativo. Depois que outro componente (talvez uma atividade ou outro serviço) inicia um serviço, ele é executado em segundo plano até parar automaticamente. Isso significa que um serviço pode manter o telefone acordado (usando uma trava de ativação ), descarregando a bateria ou usando muitos dados da rede, sem que nada apareça na tela.

Os aplicativos podem usar serviços para executar processos de execução demorada em segundo plano, como baixar arquivos de um servidor, verificar emails ou verificar sua localização. Embora os serviços não apareçam ou interajam com você diretamente, eles ainda aparecem na lista "Aplicativos em execução". Do Configurações aplicativo, escolha Apps ou aplicações gerente , em seguida, Executar . Você pode interromper um serviço dessa maneira, mas geralmente não é necessário. Como os serviços não são diretamente visíveis, o Android os considera menos importantes que as atividades; portanto, eles serão os primeiros a serem mortos quando o telefone precisar de mais memória.

Os receptores de transmissão são o terceiro tipo de componente. Como os serviços, eles existem apenas em segundo plano e não interagem diretamente com você. Mas, diferentemente dos serviços, eles não podem permanecer em execução ou executar tarefas longas: eles existem para responder a eventos. E, diferentemente das atividades e serviços, mais de um receptor de transmissão pode ser iniciado de uma só vez.

Um componente transmite uma intenção, possivelmente para um aplicativo, mas com mais frequência sem especificar um aplicativo específico. Nesse caso, a intenção geralmente representa um evento que aconteceu, como a bateria com pouca carga. O sistema localiza todos os receptores de transmissão que registraram um interesse (usando um filtro de intenção ) e executa cada um por vez. Cada receptor de transmissão pode reagir imediatamente, por exemplo, criando uma notificação ou pode iniciar um serviço ou uma atividade para executar outras ações. Assim que o receptor de transmissão manipular o evento, ele será interrompido e não será executado novamente até que outro evento semelhante seja transmitido.

Um exemplo dos três componentes trabalhando juntos é quando você baixa um aplicativo do Google Play. Primeiro, a atividade do Google Play fornece a interface visual para você escolher o conteúdo a ser baixado. A lista de aplicativos pode ser uma atividade; clicar no botão "instalar" inicia outra atividade para mostrar a caixa de diálogo de confirmação ou pagamento. Quando você confirma, a atividade de diálogo inicia um serviço. O serviço continuará a baixar o conteúdo mesmo quando a atividade terminar e não estiver mais em execução.

Mas talvez o telefone perca a conexão com a Internet enquanto o novo aplicativo está sendo baixado. Se isso acontecer, o serviço de download do Google Play registrará um receptor de transmissão, com um filtro de intenção para dizer que está interessado em alterações na conectividade da rede e, em seguida, o serviço será interrompido. Quando o telefone se conecta à Internet, o sistema transmite um evento. O Android iniciará o receptor de transmissão que o serviço Google Play registrou, juntamente com qualquer outro receptor de transmissão aguardando esse evento. Nesse caso, o receptor de transmissão iniciará o serviço de download novamente. O serviço criará notificações à medida que o download prosseguir e, quando terminar, enviará sua própria transmissão para informar outros aplicativos que o novo pacote foi instalado e, então, se interromperá. Por sua vez, isso iniciará os receptores de transmissão de outros aplicativos,

Em suma:-

  • Uma atividade representa uma janela na tela; um serviço executa uma tarefa em segundo plano possivelmente de longa duração; um receptor de transmissão é executado por um curto período de tempo para manipular um evento.
  • Todos os três são iniciados usando intenções, mas usando um mecanismo diferente. O aplicativo de inicialização deve declarar explicitamente qual tipo de componente iniciar (chamando um método diferente em cada caso).
  • Quando um aplicativo inicia uma atividade usando uma intenção, ele inicia apenas uma atividade (possivelmente mostrando a caixa de diálogo "Ação completa usando ..." para escolher qual) e o mesmo vale para serviços, mas a transmissão de uma intenção pode iniciar várias transmissões. receptores, possivelmente de aplicativos diferentes.
  • Como usuário, você interage diretamente com as atividades; você não interage com os serviços, mas eles podem diminuir a velocidade do telefone e consumir recursos; você não interage com os receptores de transmissão e, por serem de curta duração, não precisa se preocupar em gerenciá-los.
Dan Hulme
fonte
Uma resposta muito útil. Eu só quero confirmar uma coisa: o que acontece com os aplicativos desativados pelos usuários? O Android já inicia o receptor de transmissão para os fins para os quais está registrado? Ou esses aplicativos desativados podem executar o serviço em segundo plano? Por que o botão Force-Stop não está acinzentado para aplicativos desativados, mesmo após uma reinicialização? É claro para mim que suas atividades não podem ser iniciadas.
Firelord
@Firelord Se você tiver uma nova pergunta, deve publicá-la como uma nova pergunta. Os comentários não permitem respostas detalhadas e não tornam sua pergunta localizável para outros visitantes.
Dan Hulme
ótimo post, mas na verdade, existem quatro componentes. Os provedores de conteúdo estão ausentes.
Alexandre Martin