Os aplicativos Android têm uma estrutura distinta em comparação com outras plataformas, como iOS, Windows ou macOS. Se você está apenas começando no desenvolvimento de aplicativos Android ou deseja aprofundar seus conhecimentos, é importante entender os principais componentes que compõem os aplicativos Android.
Neste artigo, Bardimin discutirá Activity, Fragment, Intent, Broadcast Receiver e Service em detalhes, que são os principais componentes para garantir que os aplicativos Android funcionem corretamente.
Ao entender como cada um desses componentes funciona e interage, você pode criar um aplicativo que não seja apenas eficiente, mas também fácil de gerenciar e desenvolver ainda mais. Seja você um iniciante ou um desenvolvedor experiente, este guia ajudará você a entender a estrutura dos aplicativos Android e implementá-los em seus projetos.
Vamos começar explorando Activity, os componentes básicos responsáveis por exibir a interface do usuário (UI) em aplicativos Android.

1. Activity: Interface de usuário básica
Activity é um dos elementos mais importantes no desenvolvimento de aplicativos Android. Este elemento é responsável por exibir o (UI) user interface e regular a interação do usuário com o aplicativo. Cada Activity normalmente representa uma única visualização dentro do aplicativo, e os aplicativos Android geralmente consistem em vários Activity que colaboram entre si para fornecer uma experiência de usuário completa.
Por exemplo, em um aplicativo de calendário:
- Activity Primeiro: Exibe uma lista de agendas diárias dos usuários.
- Activity Segundo: Permite que os usuários adicionem novos compromissos preenchendo formulários.
Setiap Activity foi projetado para executar tarefas específicas e pode ser acessado separadamente, tanto de dentro do próprio aplicativo quanto de outros aplicativos. Isso torna Activity um componente altamente flexível e reutilizável.
Principais características da atividade
- Independente: Cada Activity opera de forma independente e é independente de outros Activity.
- Pode ser chamado por Intent: Activity pode ser acessado usando Intent, explicitamente (mencionando diretamente o nome da classe) ou implicitamente (especificando a ação que você deseja executar).
- Ciclo de vida do (Lifecycle): Activity tem ciclos de vida gerenciados por sistemas Android, como onCreate(), onStart(), onResume() e onDestroy(), que permitem que os desenvolvedores controlem o comportamento do aplicativo quando Activity é criado, exibido ou interrompido.
Como funciona a atividade
Activity opera de forma autônoma, o que significa que cada Activity pode funcionar sem depender de outras Activity. Isso permite que Activity sejam reutilizados em uma variedade de aplicações.
Exemplos de reutilização de atividades
- Aplicativos de e-mail: um aplicativo de e-mail pode ter um Activity para enviar mensagens. Activity pode ser usado por outros aplicativos, como o aplicativo Calendário, para enviar convites de reunião sem a necessidade de criar um novo Activity do zero.
- Aplicativos de mídia social: Activity para compartilhar conteúdo podem ser reutilizados em vários aplicativos, como galerias de fotos ou aplicativos de notícias.
A capacidade de reutilizar esse Activity não apenas economiza tempo no desenvolvimento, mas também mantém a consistência da interface do usuário em vários aplicativos.
Comunicação entre atividades
Activity não pode interagir pessoalmente. Como alternativa, o Android fornece um mecanismo chamado Intent para iniciar outro Activity e transferir dados entre Activity.
Como funciona a intenção
Você pode usar o Intent para abrir um novo Activity a partir de um Activity ativo. Por exemplo, quando um usuário pressiona o botão “Adicionar compromisso” no aplicativo de calendário, Intent abrirá um novo Activity para preencher o formulário de agendamento.
Intent também pode transportar informações de um Activity para outro Activity. Por exemplo, você pode enviar detalhes do compromisso da lista de compromissos Activity para os detalhes do compromisso Activity.
Exemplos de uso de intenção
- Aplicativos de comércio eletrônico: quando os usuários selecionam produtos da lista, Intent é usado para abrir Activity detalhes do produto e enviar informações como nomes de produtos, preços e imagens.
- Aplicativo de bate-papo: Intent usado para abrir Activity de bate-papo e enviar dados como IDs de usuário e nomes de contato.
2. Fragment: Modularidade na interface do usuário
Fragment é um elemento importante no desenvolvimento de aplicativos Android que permite dividir Activity em partes pequenas e modulares. Cada Fragment tem sua própria interface de usuário e lógica (UI), facilitando o gerenciamento de uma interface mais flexível e dinâmica.
Ao aproveitar o Fragment, você pode criar aplicativos que respondem melhor a diferentes tamanhos de tela e orientações de dispositivo, como telefones, tablets ou dispositivos dobráveis.
Benefícios de usar Fragment
Fragment fornece alguns benefícios importantes no desenvolvimento de aplicativos Android:
- Modularidade: Ao dividir Activity em Fragment, você pode gerenciar cada parte da interface separadamente, o que facilita o desenvolvimento e a manutenção do código.
- Flexibilidade: Fragment permite o aparecimento de várias partes da interface em um único Activity, especialmente útil para dispositivos com telas grandes, como tablets.
- Reutilização: Fragment pode ser reutilizado em uma variedade de Activity, reduzindo a repetição de código e melhorando a eficiência do desenvolvimento.
- Adaptabilidade: Fragment fácil personalização da interface para diferentes tamanhos de tela e orientações de dispositivos.
Exemplos de uso de fragmentos em aplicativos de comércio eletrônico:
- Fragment Primeiro: Exibe a lista de produtos no lado esquerdo da tela.
- Fragment Segundo: Exibe os detalhes do produto no lado direito da tela.
- No celular, apenas um fragmento é exibido por vez, enquanto nos tablets, os dois Fragment podem ser exibidos ao mesmo tempo.
Como funciona Fragment
Fragment têm um ciclo de vida semelhante ao Activity, incluindo métodos como onCreateView(), onStart() e onDestroyView(). No entanto, o ciclo de vida Fragment está relacionado ao Activity que o exibe.
Você pode adicionar Fragment a Activity usando FragmentManager e FragmentTransaction.
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, new MyFragment());
fragmentTransaction.commit();Fragment não podem se comunicar diretamente uns com os outros. Alternativamente, a comunicação é realizada através do Activity que abriga o Fragment ou usando uma interface (interface) para transferir dados.
3. Intent: Mecanismo de comunicação entre componentes
Intent é um dos principais mecanismos no desenvolvimento de aplicativos Android. Esse componente é usado para iniciar um Activity, Service ou enviar Broadcast. Além disso, Intent também permite a comunicação entre componentes dentro de um mesmo aplicativo ou mesmo entre aplicativos diferentes.
Intent pode ser diferenciado em:
- Explícito: chama um componente específico (como Activity ou Service) mencionando seu nome de classe diretamente.
- Implícito: especifique a ação que deseja realizar ou o tipo de dados que deseja processar, e o sistema Android selecionará o componente mais apropriado.
Tipos de intenção
1. Explicit Intent
Explicit Intent é usado quando você sabe claramente qual componente deseja chamar, como um Activity ou Service específico em seu aplicativo.
Como funciona:
Você especifica o nome da classe de componente que deseja acessar. Por exemplo, iniciar um novo Activity exibir detalhes do produto.
Intent intent new Intent(this, ProductDetailActivity.class);
startActivity(intent);Exemplo de uso:
- Inicie um novo Activity para visualizar o formulário de login.
- Inicie Service para baixar arquivos em segundo plano.
2. Intent Implicit
Intent Implicit é usado quando você deseja solicitar que o sistema Android selecione o componente mais apropriado com base nas ações ou tipos de dados especificados.
Como funciona:
Você especifica as ações (como ACTION_VIEW) e os dados (como URIs ou tipos MIME) que deseja processar. O sistema Android procurará um componente que possa lidar com a solicitação.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“https://www.example.com”));
startActivity(intent);Exemplo de uso:
- Abra o URL no navegador padrão do usuário.
- Compartilhe texto ou imagens com outros aplicativos (como mídia social ou e-mail).
- Selecione o aplicativo para abrir o arquivo PDF.
A diferença entre intenção explícita e implícita
| Aspectos | Explicit Intent | Implicit Intent |
| Propósito | Chama componentes específicos no aplicativo. | Solicitando que o sistema selecione o componente apropriado. |
| Usar | Usado para navegação interna do aplicativo. | Usado para interagir com outros aplicativos ou componentes do sistema. |
| Exemplo | Inicie a atividade de detalhes do produto. | Abra o URL em um navegador ou compartilhe conteúdo. |
Exemplos de uso de intent em aplicativos
1. Aplicativos de comércio eletrônico:
- Explicit Intent: Inicia Activity detalhes do produto quando o usuário clica em um item na lista de produtos.
- Implicit Intent: Compartilhe detalhes do produto em aplicativos de mídia social ou e-mails.
2. Aplicativos de mídia social:
- Explicit Intent: Inicia um Activity de comentários quando o usuário clica no botão “Exibir comentários”.
- Implicit Intent: Abre um link externo no navegador padrão do usuário.
3. Aplicativos de música:
- Explicit Intent: Inicia Service para reproduzir uma música em segundo plano.
- Implicit Intent: Compartilhe músicas com outros aplicativos como WhatsApp ou Instagram.
4. Broadcast Receiver: Respondendo às mudanças do sistema
Broadcast Receiver é um componente essencial em um aplicativo Android que permite que seu aplicativo responda a Broadcast Intent enviados pelo sistema Android ou outros aplicativos. Broadcast Intent é uma mensagem do sistema que informa sobre uma alteração no status ou um evento específico, como uma alteração no status da bateria, conectividade de rede ou uma mensagem SMS recebida.
Ao usar Broadcast Receiver, você pode criar aplicativos mais responsivos às mudanças no ambiente ou no sistema, proporcionando assim uma melhor experiência do usuário.
Como funciona o Broadcast Receiver
Broadcast Receiver é executado em segundo plano e não tem interface de usuário. Eles são projetados para responder a Broadcast Intent de forma rápida e eficiente. Aqui estão alguns pontos-chave sobre como funciona o Broadcast Receiver:
1. Inscrição:
- Broadcast Receiver deve ser registrado no sistema Android para responder a Broadcast Intent.
- O registro pode ser feito tanto estático (via AndroidManifest.xml) quanto dinâmico (via código do programa).
Exemplo de registro estático no AndroidManifest.xml:
<receiver android:name=“.MyBroadcastReceiver”>
<intent-filter>
<action android:name=“android.intent.action.BATTERY_LOW” />
</intent-filter>
</receiver>Exemplo de registro dinâmico no código:
IntentFilter filter new IntentFilter(Intent.ACTION_BATTERY_LOW);
MyBroadcastReceiver receiver new MyBroadcastReceiver();
registerReceiver(receiver, filter);2. Tempo de execução limitado:
- Broadcast Receiver teve apenas cerca de 5 segundos para concluir a tarefa.
- Se uma tarefa demorar mais, como baixar dados ou processar arquivos, recomendamos que você inicie Service ou use WorkManager.
3. Tarefas factíveis:
- Enviar notificações: notifique os usuários sobre alterações de status, como bateria fraca ou conexões com a Internet.
- Iniciar serviço: Inicie o serviço para executar tarefas em segundo plano, como sincronização de dados.
- Atualizar dados: atualize dados locais ou envie dados para um servidor.
Tipos de intenção de transmissão
Broadcast Intent pode ser dividido em dois tipos:
1. Normal Broadcast:
- Enviado de forma assíncrona para todos os Broadcast Receiver registrados.
- Exemplo: ACTION_BOOT_COMPLETED (enviado quando o dispositivo termina de inicializar).
2. Ordered Broadcast:
- Enviado sequencialmente para um Broadcast Receiver de cada vez.
- Broadcast Receiver pode modificar os resultados ou impedir a propagação de Broadcast Intent.
- Exemplo: ACTION_NEW_OUTGOING_CALL (enviado quando um usuário faz uma chamada de saída).
Exemplos de uso do receptor de transmissão
1. Respondendo a trocas de bateria:
- Broadcast Receiver pode detectar quando a bateria do dispositivo está fraca (ACTION_BATTERY_LOW) ou carregando (ACTION_BATTERY_OKAY).
- Exemplo: enviar uma notificação ao usuário quando a bateria estiver fraca.
2. Respondendo a alterações de conectividade de rede:
- Broadcast Receiver pode detectar alterações na conexão com a Internet (ACTION_CONNECTIVITY_CHANGE).
- Exemplo: Exibe uma mensagem quando um dispositivo perde uma conexão com a Internet.
3. Respondendo a mensagens SMS recebidas:
- Broadcast Receiver pode detectar mensagens SMS recebidas (ACTION_SMS_RECEIVED).
- Exemplo: Exiba notificações ou processe mensagens SMS automaticamente.
5. Service: Processo em segundo plano sem interface do usuário
Service é um componente essencial em um aplicativo Android que permite executar tarefas em segundo plano sem uma interface de usuário. Service é ideal para tarefas que precisam continuar em execução mesmo quando o aplicativo está inativo, como streaming de música, sincronização de dados ou atualizações de localização.
Ao usar Service, você pode garantir que seu aplicativo continue funcionando corretamente mesmo quando os usuários não estiverem interagindo diretamente com o aplicativo.
Tipos de serviço
Service pode ser dividido em dois tipos principais:
1. Started Service
Started Service é um tipo de Service que é iniciado por outro componente, como Activity ou Broadcast Receiver, e continuará a ser executado até que a tarefa seja concluída.
Como funciona:
- Started Service começa chamando o método startService().
- Service será executado em segundo plano até que a tarefa seja concluída ou interrompida manualmente.
- Quando a tarefa estiver concluída, o Service será interrompido automaticamente.
Código de exemplo:
Intent intent = new Intent(this, MyStartedService.class);
startService(intent);2. Bound Service
Bound Service é um tipo de Service que se liga a outros componentes, como Activity ou Fragment, e será executado enquanto esses componentes estiverem ativos.
Como funciona:
- Bound Service começa chamando o método bindService().
- Service será executado enquanto houver componentes conectados a ele.
- Se todos os componentes liberarem a ligação, o Service será interrompido automaticamente.
Código de exemplo:
Intent intent = new Intent(this, MyBoundService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);A diferença entre serviço iniciado e serviço vinculado
| Aspectos | Started Service | Bound Service |
| Como começar | Começando com startService(). | Começando com bindService(). |
| Duração | É executado até que a tarefa seja concluída ou interrompida. | Funciona enquanto houver componentes conectados. |
| Comunicação | Não é possível se comunicar diretamente com outros componentes. | Pode se comunicar diretamente com componentes colados. |
| Exemplos de uso | Streaming de música, sincronização de dados. | Reprodutor de música, comunicação em tempo real. |
Exemplos de uso de serviço em aplicativos
1. Aplicativos de música:
- Started Service: Reproduza música em segundo plano quando o aplicativo estiver inativo.
- Bound Service: Controle a reprodução de música de Activity ou Fragment.
2. Aplicativos de esportes:
- Started Service: rastreia a localização do usuário durante a corrida ou ciclismo.
- Bound Service: Exibe dados de localização e velocidade em tempo real no Activity.
3. Aplicativo de bate-papo:
- Started Service: Envie e receba mensagens em segundo plano.
- Bound Service: Exibe novas mensagens em tempo real no Activity.
6. Content Provider: Compartilhamento de dados entre aplicativos
Content Provider é um componente essencial em aplicativos Android que permite que os aplicativos compartilhem dados com outros aplicativos. Usando Content Provider, você pode dar acesso aos dados do seu aplicativo, como listas de contatos, arquivos de mídia ou bancos de dados, a outros aplicativos.
Content Provider também permite que seu aplicativo acesse dados de outros aplicativos, como acessar a lista de contatos ou a galeria de fotos de um usuário.
Como usar o Content Provider
Content Provider fornece uma interface padronizada para acessar e manipular dados. Os dados são acessados por meio de URI (Uniform Resource Identifier) definido pelo Content Provider.
1. Acessando dados de Content Provider
Para acessar os dados do Content Provider, você precisa usar o ContentResolver e o URI apropriados.
Exemplo de acesso a uma lista de contatos:
Uri uri = ContactsContract.Contacts.CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String name cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d(“Contact”, name);
}
cursor.close();
}2. Adicionando, modificando ou excluindo dados
Você também pode adicionar, alterar ou excluir dados por meio de Content Provider usando ContentResolver.
Adicionando dados:
ContentValues values = new ContentValues();
values.put(ContactsContract.Contacts.DISPLAY_NAME, “John Doe”);
Uri newContactUri = getContentResolver().insert(ContactsContract.Contacts.CONTENT_URI, values);Alteração de dados:
ContentValues values = new ContentValues();
values.put(ContactsContract.Contacts.DISPLAY_NAME, “Jane Doe”);
getContentResolver().update(ContactsContract.Contacts.CONTENT_URI, values, null, null);Excluindo dados:
getContentResolver().delete(ContactsContract.Contacts.CONTENT_URI, null, null);Exemplos de uso do Content Provider
1. Aplicação do contato:
- Content Provider permite que outros aplicativos acessem a lista de contatos do usuário.
- Exemplo: um aplicativo de mensagens usa um Content Provider para selecionar o contato do destinatário.
2. Aplicativo de galeria de fotos:
- Content Provider permite que outros aplicativos acessem fotos e vídeos armazenados no dispositivo.
- Exemplo: um aplicativo de mídia social usa um Content Provider para selecionar fotos para upload.
3. Aplicativo de calendário:
- Content Provider permite que outros aplicativos acessem agendas e eventos no calendário do usuário.
- Exemplo: um aplicativo de lembrete usa um Content Provider para adicionar eventos ao calendário.
7. Application Manifest: Colagem que mantém aplicações unidas
Application Manifest é um arquivo XML que serve como uma “cola” que mantém todos os componentes de um aplicativo Android juntos. Esse arquivo define a estrutura do aplicativo, incluindo Activity, Service, Broadcast Receiver e Content Provider, bem como as permissões exigidas pelo aplicativo.
O importante papel do Application Manifest
1. Definindo componentes do aplicativo:
- Activity: Define a tela ou a interface do usuário.
- Service: Defina o processo em segundo plano.
- Broadcast Receiver: Define os componentes que respondem às mensagens do sistema.
- Content Provider: Defina o mecanismo de compartilhamento de dados.
Exemplo de definição de Activity em AndroidManifest.xml:
<activity android:name=“.MainActivity”>
<intent-filter>
<action android:name=“android.intent.action.MAIN” />
<category android:name=“android.intent.category.LAUNCHER” />
</intent-filter>
</activity>2. Declare permissão:
- Os aplicativos Android exigem permissão para acessar determinados recursos, como câmera, localização ou Internet.
- Esta licença foi declarada em AndroidManifest.xml.
Exemplo de uma declaração de permissão:
<uses-permission android:name=“android.permission.CAMERA” />
<uses-permission android:name=“android.permission.INTERNET” />3. Definindo metadados do aplicativo:
- Application Manifest também contém informações como nome do aplicativo, ícone, tema e versão.
Exemplo de metadados do aplicativo:
<application
android:name=“.MyApplication”
android:icon=“mipmap/ic_launcher”
android:label=“string/app_name”
android:theme=“style/AppTheme”>
</application>8. Application Resources: Ativos para interface do usuário
O aplicativo Android armazena recursos como cadeias de caracteres, imagens, fontes e layouts de interface do usuário no diretório /res. Esses recursos são gerenciados separadamente do código do programa, permitindo que você personalize facilmente o aplicativo para diferentes dispositivos, idiomas e orientações de tela.
Tipos de recursos
1. String: texto usado no aplicativo, como títulos, mensagens ou rótulos.
Armazenado em res/values/strings.xml.
Exemplo:
<string name=“app_name”>My App</string>
<string name=“welcome_message”>Welcome to My App!</string>2. Imagens: recursos visuais, como ícones, imagens de fundo ou ilustrações.
Armazenado em res/drawable/ ou res/mipmap/.
Exemplos: ic_launcher.png, background.jpg.
3. (Layout) Layout: Um arquivo XML que define a estrutura da interface do usuário.
Armazenado em res/layout/.
Exemplos: activity_main.xml, fragment_detail.xml.
4. Cor: A definição da cor usada no aplicativo.
Armazenado em res/values/colors.xml.
Exemplo:
<color name=“primary_color”>6200EE</color>
<color name=“secondary_color”>03DAC6</color>5. Dimensões: O tamanho e o preenchimento usados no layout.
Armazenado em res/values/dimens.xml.
Exemplo:
<dimen name=“padding_small”>8dp</dimen>
<dimen name=“text_size_large”>24sp</dimen>Acessando recursos por meio da Classe R
Quando um aplicativo é compilado, o Android gera automaticamente uma classe R que contém referências a todos os recursos definidos no diretório /res. Você pode acessar esses recursos por meio da classe R no código do programa.
Exemplo de acesso a strings:
String appName = getString(R.string.app_name);Exemplo de acesso a imagens:
ImageView imageView = findViewById(R.id.my_image_view);
imageView.setImageResource(R.drawable.ic_launcher);Exemplo de acesso a um layout:
setContentView(R.layout.activity_main);Conclusão
Ao entender os principais componentes, como Activity, Fragment, Intent e Service, você pode criar aplicativos Android mais eficientes, modulares e gerenciáveis. Cada componente tem uma função específica que permite que o aplicativo funcione corretamente, tanto em primeiro plano quanto em segundo plano.
Além disso, componentes como Broadcast Receiver e Content Provider permitem que seu aplicativo responda a alterações do sistema e compartilhe dados com outros aplicativos.
Ao aproveitar Application Manifest e Application Resources, você pode definir a estrutura do seu aplicativo e gerenciar ativos como strings, imagens e layouts de maneira mais organizada.


