[Anatomy of Android] The Binder (I)

Voltando com os posts no blog, publico sobre o Binder no Android. Mais uma da série de traduções do blog sobre a anatomia do Android.

Boa leitura…

Visão de alto nível sobre o Binder Android

O Binder é um dos mais interessantes mecanismos no Android. Binder é um mecanismo RPC/IPC. Pode ser surpreendente para muitos, mas o conceito não é uma inovação do Android. Sua origem remonta ao BeOS antes de sua aquisição pela Palm. O código do Binder foi liberado como Open Source semanas antes da morte da Palm e nomeado como OpenBinder. O projeto foi iniciado por George Hoffman e continuado por Dianne Hackborn e a equipe da PalmSource. Ela foi quem realmente o abriu para mundo antes de desaparecer. Em qualquer caso, o Android Binder não é um fork do OpenBinder mas é uma implementação desse conceito a partir do zero. Sim Dianne trabalha no Android agora.

Se você quer saber mais sobre o OpenBinder original, você deve ler a documentação (http://www.angryredplanet.com/~hackbod/openbinder), que continua a ser uma leitura obrigatória.

O Binder no Android permite aplicativos conversarem com o system server e uns com os outros. Desenvolvedores nāo precisam conhecer nada para isso. Eles apenas utilizam diferentes interfaces para os serviços, mas por baixo essas interfaces utilizam o binder. Os desenvolvedores apenas nāo o vêem.

Binder

Como podem ver na imagem acima, o binder (/dev/binder) está localizado no meio de todas as açōes e é usado em quase tudo que acontece entre os processos no coração da plataforma.

Por exemplo, vamos dizer que uma aplicaçāo quer instanciar a window service, o código seguinte seria necessário:

WindowManager mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE)

A aplicação agora pode usar todos os serviços da WindowManager como:

mWindowManager.addView(mDecor, l);
mWindowManager.removeView(mDecor);
mWindowManager.updateViewLayout(mDecor, params);

Quando um aplicativo instancia um serviço, esse processo está passando pelo Binder para o Service Manager, que o procura, e então envia uma referência para o app, entāo o app pode ir e requisitar chamadas remotas a partir desse objeto, como updateViewLayout(). Se você precisa saber mais sobreRPC/IPC, eu recomendo que você leia developer’s introduction to RPC and XDR, from SGI IRIX documentation.

Esta é a primeira parte dos posts sobre o binder. Ele é muito complexo para ser falado em apenas um post, por isso vamos seguir um passo-a-passo.

Publicação original

Leave a Comment

Your email address will not be published. Required fields are marked *