AIDL: Integrando múltiplos aplicativos no Android

Veja neste artigo como integrar múltiplos aplicativos no Android usando o Android Interface Definition Language (AIDL)

Fique por dentro
Este artigo apresenta uma importante forma de integração entre processos (Inter-Process Communication) existente no Android, a AIDL (Android Interface Definition Language). Sua utilização é pouco difundida, porém se torna uma excelente opção quando o assunto é comunicação entre aplicativos.

AIDL é particularmente útil quando diferentes aplicativos necessitam se comunicar entre si para troca de informações através de uma interface bem definida e com suporte a Multithreading. Diferentemente do uso de Messenger com Bound Services, com AIDL você é obrigado a criar um arquivo .aidl que contém a declaração da interface de integração, o que ajuda as aplicações clientes a saberem quais operações estão disponíveis bem como seus respectivos argumentos e retornos.

A plataforma Android é rica em recursos quando o assunto é integração entre aplicativos, por exemplo: Intents, Broadcast Receivers e Services. Este último é interessante quando existir a necessidade de executar um processamento longo em background, é dessa forma que inúmeras aplicações realizam suas operações mais pesadas sem interferir na interface com o usuário.

No Android é possível criar serviços de dois tipos: Started e Bound. O primeiro é quando um componente da aplicação inicia o serviço chamando o método startService() e o segundo tipo é quando um componente da aplicação chama bindService().

Os serviços Started e os serviços Bound possuem usos distintos, por exemplo, quando se deseja executar uma única operação em background sem retornar uma resposta ao componente que iniciou o serviço, o mais indicado é um serviço do tipo Started.

Por outro lado, quando se deseja uma interação maior com o serviço, ou seja, enviar e receber parâmetros ou até mesmo realizar chamadas IPC, o tipo mais adequado é o serviço do tipo Bound.

Apesar das diferenças de uso, no nível da programação independente de qual o tipo que está sendo criado, ambas as classes de serviço devem herdar direta ou indiretamente de android.app.Sevice (Figura 1) e possuir a declaração no arquivo AndroidManifest.xml (Listagem 1).

Figura 1. Herança a ser obedecida.

Listagem 1. Declaração de um serviço no AndroidManifest.xml. <manifest ... > ... <application ... > <service android:name=".MyService" /> ... </application> </manifest>

E se tratando de comunicação por meio de serviços do tipo Bound, um método que merece atenção é o onBind(), da classe android.app.Service, a qual retorna uma instância da interface IBinder. Essa é uma abstração da API para uma importante função do sistema operacional Linux que o Android encapsula, as chamadas IPC.

Felizmente no Android existe um framework chamado Binder Framework (veja a Figura 2) que possui uma estrutura montada especificamente para abstrair importantes passos da comunicação entre processos do Linux.

" [...] continue lendo...

Artigos relacionados