Pesquisar no Programero

quarta-feira, 6 de abril de 2011

Antes do hello world um pouco de teoria (Android)

Eu sei que o legal de desenvolver é pular a parte chata (documentação e teoria) e ir direto para o desenvolvimento, fazendo de cara o bom e velho hello world, ok sem problema, mas depois é bom dar uma olhada nos fundamentos para ter noção das possibilidades da plataforma.

 

Um aplicativo dentro do sistema Android

As aplicações Android são codificadas em Java, depois de tudo compilado, código e recursos são colocados em um pacote, com extensão .apk, esse é o “instalador” da apicação desenvolvida.

Depois de instalado, a aplicação fica em seu próprio “sand box”:

  • O Android é um SO baseado em Linux, cada aplicação é tratada como um usuário distinto;
  • Cada aplicação recebe um ID de usuário único, onde apenas esse usuário possui permissão de acesso aos arquivos da aplicação;
  • Cada processo tem sua própria máquina virtual (VM), então o código de um aplicativo é executado isoladamente de outras aplicações.
  • Cada aplicativo é executado em seu próprio processo, que inicia quando um dos componentes da aplicação precisa ser executada e encerra caso contrário para a liberação de memória;

Desta forma, o sistema Android implementa o princípio de privilégio mínimo. Ou seja, cada aplicação, por padrão, só tem acesso aos componentes que ele necessita para fazer o seu trabalho e nada mais. Isso cria um ambiente muito seguro em que um aplicativo não pode acessar partes do sistema para o qual não é dado a permissão.

Porém existem maneiras de compartilhar dados com outras aplicações ou mesmo acessar outros serviços:

  • É possível configurar duas aplicações com o mesmo ID, de forma que ambas podem compartilhar seus recursos;
  • Um aplicativo pode solicitar permissão para acessar os dados do dispositivo, como contatos do usuário, mensagens SMS, o armazenamento (cartão SD), câmera, Bluetooth e outros. Todas as permissões devem ser concedidas pelo usuário no momento da instalação.

 

Componentes de aplicação

São os blocos de construção de uma aplicação, onde cada um permite uma maneira de entrada do sistema para a aplicação. Nem todos os componentes são pontos de entrada real para o usuário e alguns dependem uns dos outros, mas cada um existe como uma entidade própria e desempenha um papel específico, cada um é um bloco único que ajuda a definir o comportamento global da aplicação.

Existem quatro tipos diferentes de componentes de aplicação. Cada tipo serve a um propósito diferente e tem um ciclo de vida distinto que define como o componente é criado e destruído, são eles:

Activity

O activity representa uma tela de inteface com o usuário, uma aplicação pode conter várias activitys cada uma com seu propósito e a aplicação pode iniciar de qualquer uma delas se assim for permitido. Um exemplo poderia ser um activity de login, outro de menu e outro de cadastro, a menos que exista algum controle é perfeitamente possível iniciar a aplicação de qualquer uma delas.

Services

Os serviços não possuem interface com o usuário, possuem como propósito executar operações em segundo plano, mesmo quando a aplicação não esta ativa, como por exemplo realizar verificações para a aplicação quando o usuário estiver em outra ou tocar uma música por exemplo

Content provider

Sua função é gerenciar dados do aplicativo, como arquivos ou banco de dados. Ele também é capaz de permitir que outros aplicativos acessem esses dados, um exemplo disso é o content provider do Android que fornece informações de contatos do usuário.

Broadcast receivers

É o componente que recebe mensagens de sistema, como por exemplo desligamento de tela ou bateria fraca, também podem ser usados para criar notificações para o usuário. É comumente usado para iniciar serviços.

 

Ativando componentes

Três dos quatro tipos de componentes activitys, services e broadcast receivers são ativados através de uma mensagem assíncrona chamado intent. Intents são componentes individuais que se ligam uns aos outros em tempo de execução.

Para as activityse services, o intent define a ação a ser executada (por exemplo, para "ver"ou "mandar" alguma coisa), e pode especificar o URI dos dados para agir sobre (entre outras coisas que o componente a ser iniciado necessita de saber ).

Para broadcast receivers, o intent simplesmente define a mensagem a ser (por exemplo, uma transmissão para indicar a bateria do dispositivo é reduzido inclui apenas uma seqüência de ação que indica "a bateria está baixa").

O content provider, não é ativado por intents, ele é ativado por um pedido de ContentResolver. O content resolver manipula todas as operações diretas com o content provider. Isso deixa uma camada de abstração entre o content provider e as informações sobre o componente requerente (por segurança).

 

O arquivo manifest

Para que o Android possa iniciar um componente de nosso aplicativo, ele precisa antes de mais nada conhece-lo, por isso todos os componentes devem ser declarados no AndroidManifest.xml (fica na raiz de nossa aplicação). Além de nossos componentes também devem ser declarados os recursos do aparelho que serão utilizados, como acesso ao cartão SD ou navegação na internet, bibliotecas utilizadas, nivel de API entre outras coisas.

Recursos

Em geral as aplicações são formadas por muito mais do que código, como imagens, sons, estilos, definições de layout, cores, enfim uma infinidade de outras coisas.

Com recursos fica mais fácil realizar uma mudança no estilo das telas por exemplo sem a necessidade de alterar o código da aplicação, para acessar os recursos basicamente é necessário apenas que se conheça seu ID.

Um novo projeto Android vem com três grupos diferentes de recursos, drawable (aqui ficariam as imagens usadas pelo sistema), layout (aquios arquivos XML que definem as telas do sistema) e values (arquivos XML no estili INI, com nome e um valor).

Encerrando

Bom era isso, se você chegou até aqui tenho certeza que agora possui uma ótima noção de como as coisas funcionam no Android, para ver na integra o documento de fundamentos sobre o Andoird (sem tradução meia boca) é só acessar aqui.