AIDL: Integrando múltiplos aplicativos no Android
Veja neste artigo como integrar múltiplos aplicativos no Android usando o Android Interface Definition Language (AIDL)
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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo