Você está na página 1de 21

Desenvolvimento mvel para a plataforma Android Parte I

2011

Desenvolvimento mvel para a plataforma Android Parte I

Marcelo Henrique Valenzi Amorim @marcelohva marcelohva.wordpress.com


TM - Android is a trademark of Google Inc.

http://marcelohva.wordpress.com

Desenvolvimento mvel para a plataforma Android Parte I

2011

Sumrio
Captulo 1 - Introduo plataforma Android ..................................................................................... 3 Dispositivos Android .................................................................................................................. 4 Arquitetura da plataforma Android ............................................................................................ 5 Camada do Kernel do Linux ..............................................................................................5 Camada do Runtime Android ............................................................................................5 Camada de Bibliotecas ......................................................................................................6 Camada Framework de Aplicao .....................................................................................6 Camada de Aplicaes .......................................................................................................7 Android SDK.............................................................................................................................. 7 Ferramentas de Desenvolvimento Android Development Tools (ADT) ................................. 7 Criando o ambiente de desenvolvimento ................................................................................... 7 Instalando o Java SE Development Kit (JDK) ..................................................................8 Instalando o Eclipse IDE ...................................................................................................8 Instalando o Android SDK ................................................................................................8 Instalando o plugin Android Development Tools (ADT) ..................................................8 Instalando os componentes e plataformas do Android SDK ...........................................10 Configurando o Android Virtual Device (AVD) ..............................................................12 Exerccios ................................................................................................................................. 12 Captulo 2 - Conceitos Fundamentais de uma Aplicao Android .................................................... 13 Componentes de uma aplicao ............................................................................................... 13 Ativando componentes ....................................................................................................14 Arquivo de Manifesto ......................................................................................................15 Resources .........................................................................................................................16 Activities .................................................................................................................................. 17 Criando uma Activity.......................................................................................................17 Implementando uma interface de usurio ........................................................................17 Ciclo de Vida ...................................................................................................................18 Salvando o estado ............................................................................................................21

http://marcelohva.wordpress.com

Desenvolvimento mvel para a plataforma Android Parte I

2011

Captulo 1 - Introduo plataforma Android


Android uma plataforma de software para dispositivos mveis composta de um sistema operacional, middleware e algumas aplicaes. Maiores detalhes sobre sua arquitetura sero dados em captulos posteriores. A plataforma foi desenvolvida pela Google aps a compra da Android Inc. em meados de 2005 e posteriormente passou a ser evoluda tambm pela Open Handset Alliance (uma aliana entre algumas empresas com inteno de criar padres abertos para telefonia mvel), mas ainda mantendo a gerencia do produto e engenharia de processos sob a tutela do Google. No segundo semestre de 2008 foi lanado o primeiro telefone que rodava com o sistema Android: o HTC Dream. Desde ento o nmero de fornecedores e dispositivos que aderiram plataforma cresceu exponencialmente, tornando o Android uma das plataformas mais vendidas no mundo todo. De acordo com relatrio publicado em maro de 2011 pela Nielsen Company, a plataforma Android j possui 37% do mercado de smartphones nos Estados Unidos. O relatrio tambm apresenta a tendencia que mostra que a plataforma foi escolhida por 50% das pessoas que compraram um smartphone nos seis meses anteriores pesquisa. Esta grande ascenso no mercado somada tendencia de continuar crescendo torna a construo de software para a plataforma Android uma nova opo de mercado para muitos desenvolvedores.

Figura 1- Smartphone market share - March'11, Nielsen Mobile Insights, National (http://blog.nielsen.com/nielsenwire/?p=27418)

http://marcelohva.wordpress.com

Desenvolvimento mvel para a plataforma Android Parte I

2011

Dispositivos Android
Hoje existem diversos tipos de dispositivos rodando a plataforma Android, desde smartphones, tablets at novas tecnologias de Televisores como a Google TV. Dentre tantas opes de dispositivos no mercado existem tambm diversas verses da plataforma em execuo por todo o mundo. Para o nosso curso iremos utlilizar a verso 2.2, tambm chamada Froyo, por ser a que possui maior distribuio no mercado atualmente (vide abaixo). A distribuio atual das verses foi realizada catalogando todos os dispositivos que se conectaram ao Android Market por um periodo de 14 dias e pode ser encontrada no site developers.android.com. Platform Codename API Level 3 4 7 8 Distribution 1.0% 1.8% 13.3% 51.2% 0.6% 30.7% 0.2% 0.7% 0.5%

Android 1.5 Cupcake Android 1.6 Donut Android 2.1 Eclair Android 2.2 Froyo Android 2.3 9 Android 2.3.2 Android 2.3.3 Gingerbread 10 Android 2.3.4 Android 3.0 11 Honeycomb 12 Android 3.1 Android 3.2 13

Tabela 1: Distribuio de verses em uso da plataforma Android, Setembro 2011 developer.android.com

Figura 2- Distribuio de verses em uso da plataforma Android, Setembro 2011 developer.android.com


http://marcelohva.wordpress.com 4

Desenvolvimento mvel para a plataforma Android Parte I

2011

Arquitetura da plataforma Android


Como citado anteriormente, a plataforma composta de um sistema operacional, middleware e aplicaes chaves. A plataforma tambm possui sua prpria e otimizada Java Virtual Machine (JVM), conhecida como Dalvik VM. A plataforma formada em cima de uma pilha de camadas de software que roda em cima do sistema operacional modificado Linux com algumas bibliotecas C essenciais. Acima dessas camadas vem a Dalvik VM, as bibliotecas Java e as aplicaes finais dos usurios. Entrando em detalhes podemos separar a arquitetura em 5 camadas conforme a figura abaixo: Kernel do Linux (Linux Kernel), Bibliotecas (Libraries), Runtime do Android (Android Runtime), Framework de Aplicao (Application Framework) e a camada de aplicaes (Applications).

Figura 3 - Arquitetura da plataforma Android - developer.android.com

Camada do Kernel do Linux


A plataforma baseia-se no sistema operacional Linux (verso 2.6) para os servios centrais do sistema, tais como segurana, gerenciamento de memria, gerenciamento de processos, servios de rede e o modelo de drivers. O kernel tambm funciona como uma camada de abstrao entre o hardware e o resto das camadas de software da plataforma.

Camada do Runtime Android


Essa camada inclui uma serie de bibliotecas que provm a maioria das funcionalidades disponveis nas principais bibliotecas da linguagem JAVA.

http://marcelohva.wordpress.com

Desenvolvimento mvel para a plataforma Android Parte I

2011

Cada aplicao Android roda em seu prprio processo, com sua prpria instancia da mquina virtual Dalvik (DVM) que otimizada para que os dispositivos possam rodar diversas mquinas virtuais ao mesmo tempo. A DVM tambm roda arquivos no formato Dalvik Executable (.dex) que otimizado para menor consumo de memria. A DVM baseada em registros e roda classes que foram compiladas pelo compilador da linguagem JAVA e depois transformadas para o formato .dex, atravs da ferramenta dx inclusa no SDK. A DVM baseia-se no kernel Linux para funcionalidades subjacentes como threading e o gerenciamento de baixo nvel de memria.

Camada de Bibliotecas
Essa camada inclui uma serie de bibliotecas C/C++ que so utilizadas por vrios componentes do sistema Android. Essas capacidades so expostas para os desenvolvedores pela camada do Application Framework. Algumas dessas bibliotecas so listadas abaixo: System C library biblioteca de sistema padro da linguagem C (libc), derivada do BSD e otimizada para dispositivos com Linux embarcado. Media Libraries baseda no PacketVideo's OpenCORE; as bibliotecas suportam os mais populares formatos de audio e video, bem como imagens estticas, incluindo os formatos MPEG4, H.264, MP3, AAC, AMR, JPG, e PNG. Surface Manager gere o acesso ao subsistema de exibio bem como as mltiplas camadas de aplicaes 2D e 3D. LibWebCore um engine de navegador web utilizado tanto no Android Browser quanto para exibies web. SGL o engine de grficos 2D. 3D libraries uma implementao baseada no OpenGL ES 1.0 APIs; as bibliotecas utilizam acelerao 3D via hardware (quando disponvel) ou o software de renderizao 3D altamente otimizado includo no Android. FreeType renderizao de fontes vector e bitmaps SQLite um poderoso e leve engine de banco de dados relacional disponvel para todas as aplicaes.

Camada Framework de Aplicao


Essa camada formada pelo framework de aplicao comum a todas as aplicaes centrais da plataforma, possibilitando aos desenvolvedores utilizarem as mesmas APIs que estas aplicaes utilizam. Possibilita tambm o reuso de diversos componentes, onde uma aplicao pode publicar suas capacidades e outra aplicao pode fazer uso destas capacidades (aes sujeitas ao controle de segurana do prprio framework). Dentre os servios e subsistemas disponveis, temos: Um rico e extensvel conjunto de Views que pode ser utilizado na construo de aplicaes, incluindo componentes de lista, grades, campos de texto e at um navegador web. Um Provedores de Contedo (Content Providers) que habilitam as aplicaes acessar dados de outras aplicaes ou compartilhar seus prprios dados.

http://marcelohva.wordpress.com

Desenvolvimento mvel para a plataforma Android Parte I

2011

Um Gerenciador de Recursos (Resource Manager) que prov acesso para recursos externos ao cdigo como strings localizadas, grficos e arquivos de layout. Um Gerenciador de Notificaes (Notification Manager) que possibilita que todas as aplicaes possam gerar alertas customizados na barra de status. Um Activity Manager que gerencia o ciclo de vida das aplicaes e prove um backstack comum de navegao.

Camada de Aplicaes
Um dispositivo Android vir com um conjunto de aplicaes fundamentais. Dentre elas temos um cliente de e-mail, programa de SMS, agenda, mapas, navegador, contatos e outras. Todos os aplicativos foram implementados utilizando a linguagem de programao Java.

Android SDK
Para trabalhar com desenvolvimento para a plataforma Android os desenvolvedores devem fazer uso de um kit de desenvolvimento de software (software development kit SDK) disponibilizado pelo Google: o Android SDK. O Android SDK suporta uma grande parte da especificao Java Standart Edition (JSE), exceto as partes relativas aos frameworks de interface de usuario (user interface UI) como o Abstract Windowing Toolkit (AWT) e o Swing. Ao programar com Android o desenvolvedor dever utilizar outro framework de interface com o usurio, mais moderno e que j disponibilizado no Android SDK. Iremos estudar mais sobre este framework em captulos posteriores.

Ferramentas de Desenvolvimento Android Development Tools (ADT)


Para desenvolver de maneira produtiva com Android, assim como em outras plataformas (Java, .Net, etc) o desenvolvedor deve fazer bom uso de IDEs ou outras ferramentas que facilitem o processo de criao de novas aplicaes. Essas ferramentas auxiliam o desenvolvedor ao automatizar alguns passos, fornecer alguns passo a passos (wizards), dentre outras facilidades. A ferramenta que iremos utilizar em nosso curso ser a IDE Eclipse, muito utilizada no desenvolvimento com JAVA. Para complementar essa ferramenta o Google criou um plugin: o Android Development Tools (ADT) . O ADT j vem incluso no Android SDK.

Criando o ambiente de desenvolvimento


Os passos necessrios para se criar um ambiente bsico de desenvolvimento para a plataforma Android sero citados aqui neste capitulo. O usurio dever seguir todos esses passos para criar o ambiente que ser utilizado durante todo o curso. Esse mesmo ambiente poder ser utilizado em outras situaes, at mesmo de forma profissional, sem deixar a desejar por se tratar do ambiente recomendado pela prpria Google. Os requisitos para o ambiente de nosso curso sero: 1. Kit de desenvolvimento Java SE (JDK) verso 6 update 27 instalado; 2. Eclipse IDE for Java Developers verso Indigo 3.7.1 instalado; 3. Android SDK verso r13 instalado;
http://marcelohva.wordpress.com 7

Desenvolvimento mvel para a plataforma Android Parte I

2011

4. Android Development Tools plugin (ADT) instalado no Eclipse; Para saber todos requisitos mnimos necessrios da plataforma de desenvolvimento Android basta acessar o site http://developer.android.com/sdk/requirements.html.

Instalando o Java SE Development Kit (JDK)


Para instalar o Java SE Development Kit (JDK) devemos seguir os passos abaixo: 1. fazer o download do arquivo de instalao no site http://www.oracle.com/technetwork/java/javase/downloads/index.html; da Oracle:

2. executar o arquivo de instalao jdk-6u27-windows-i586.exe e seguir os passos da instalao.

Instalando o Eclipse IDE


Para instalar o Eclipse IDE devemos: 3. fazer o download da verso Eclipse IDE for Java Developers (Indigo 3.7.1) no site http://www.eclipse.org/downloads/ 1. extrair todo o contedo do arquivo eclipse-java-indigo-SR1-win32.zip e mover o diretrio do eclipse para C:\curso_android\eclipse e 2. execute o arquivo C:\curso_android\eclipse\eclipse.exe para rodar a IDE.

Instalando o Android SDK


Para instalar o Android SDK iremos utilizar o SDK Starter Package. Ele composto de apenas algumas ferramentas principais do SDK com as quais poderemos configurar nosso futuro ambiente de desenvolvimento, fazendo o download apenas dos componentes que desejarmos. Para o nosso curso iremos fazer a instalao seguindo os passos abaixo: 1. primeiramente baixe o arquivo de instalao para Windows do SDK Starter Package (installer_r13-windows.exe) em http://developer.android.com/sdk/index.html; 2. rode o arquivo de instalao, esse ir verificar se existe um JDK adequado instalado na mquina. 3. Instale o SDK Tools no diretrio indicado pelo instalador e anote o local para futura referencia. 4. Ao termino da instalao o aplicativo Android SDK and AVD Manager ser inicializado. Feche o aplicativo sem executar nenhuma modificao. 5. Agora iremos instalar o plugin ADT conforme a prxima seo e depois retomaremos com os passos para finalizar a instalao do Android SDK.

Instalando o plugin Android Development Tools (ADT)


Com o eclipse em execuo siga os passos para instalar o plugin do ADT: 1. Dentro do Eclipse, selecione Help Install New Software... 2. Clique no boto Add, no canto superior direito.
http://marcelohva.wordpress.com 8

Desenvolvimento mvel para a plataforma Android Parte I

2011

3. No dilogo Add Repository que aparece, digite ADT Plugin no campo Name e digite a URL seguinte no campo Location: https://dl-ssl.google.com/android/eclipse/ 4. Clique em OK. Nota: Caso voc esteja tendo problema ao realizar o download do plugin tente utilizar http ao invs de https. 5. No dilogo Available Software, selecione o checkbox da entrada Developer Tools e clique em Next.

Figura 4 - Tela de instalao do plugin ADT no Eclipse 6. Na prxima tela, voc ver uma lista de ferramentas que sero baixadas. Clique em Next. 7. Leia e aceite os termos das licenas e clique em Finish. Nota: Se voc receber um alerta de segurana dizendo que a autenticidade ou validade do software no pode ser estabelecida, clique em OK. 8. Reinicie o eclipse quando a instalao terminar. Agora iremos configurar o ADT para que ele aponte para o diretrio do Android SDK: 9. No eclipse, selecione Window Preferences... para abrir o painel de preferencias.
http://marcelohva.wordpress.com 9

Desenvolvimento mvel para a plataforma Android Parte I

2011

10. Selecione Android no painel da esquerda. Nota: Voc poder receber um dialogo perguntando se voc quer enviar estatsticas de uso para o Google. Faa sua opo e clique em Proceed. 11. No painel principal, em SDK Location, clique em Browse... e localize o diretrio onde foi instalado o Android SDK (o diretrio que foi anotado no passo 3 da instalao do SDK).

Figura 5 - Tela de configurao da localizao do SDK no Eclipse 12. Clique em Apply e depois em OK.

Instalando os componentes e plataformas do Android SDK


Para terminar a instalao do Android SDK devemos instalar as plataformas e componentes que precisamos para nosso ambiente. Para isto devemos executar novamente o Android SDK and AVD Manager que pode ser encontrado nos atalhos de programas instalados com o Android SDK: Iniciar Programas Android SDK Tools SDK Manager. Existem diversas combinaes de componentes e plataformas que podem ser instalados, mas para nosso curso iremos utilizar a combinao (vide figura): SDK Tools
http://marcelohva.wordpress.com 10

Desenvolvimento mvel para a plataforma Android Parte I

2011

SDK Platform-tools SDK Platform (plataforma Froyo 2.2 apenas) Documentao Driver USB Google APIs (relativa plataforma Froyo)

Figura 6 - Lista de itens a serem instalados pelo SDK

http://marcelohva.wordpress.com

11

Desenvolvimento mvel para a plataforma Android Parte I

2011

Configurando o Android Virtual Device (AVD)


O Android Virtual Device (AVD) consiste de uma serie de configuraes para emular um dispositivo virtual da plataforma Android. O AVD consiste em: Um perfil de hardware: que define as funcionalidades do dispositivo virtual. Voc pode escolher, por exemplo, se o dispositivo possui uma cmera, se ele utiliza teclado fsico QWERTY ou um dialing pad, a quantidade de memoria disponvel, dentre outras configuraes. Um mapeamento para uma imagem do sistema: voc pode definir qual verso da plataforma Android ir rodar no dispositivo virtual. Voc pode escolher uma verso padro da plataforma Android ou uma imagem de sistema empacotada com algum SDK add-on. Outras opes: Voc pode selecionar o skin do emulador para ser utilizado no AVD, possibilitando controlar dimenses de tela, aparncia, dentre outras configuraes. Voc tambm poder especificar qual SD card ser emulado para utilizar com o AVD. Uma rea de armazenamento dedicada em sua mquina de desenvolvimento: os dados de usurio do dispositivo (aplicaes instaladas, configuraes, e afins) e o SD card emulado so salvos nesta rea. Antes de poder executar um emulador Android para testar suas aplicaes voc ter que criar um AVD. Para criar um AVD siga os passos: 1. No Eclipse, selecione Window Android SDK and AVD Manager. 2. Selecione Virtual Devices no painel esquerdo. 3. Clique em New.... 4. Digite o nome desejado para seu novo AVD quando o dilogo Create New AVD aparecer. 5. Selecione o target, que ser a plataforma (ou verso do Android SDK) que voc quer emular. Para nosso curso selecione a plataforma Froyo (2.2) previamente instalada. 6. Clique em Create AVD.

Exerccios
Para testar o ambiente de desenvolvimento criado e entender um pouco mais do processo de criao de uma aplicao Android, execute os exerccios 1 e 2 da apostila de exerccios.

http://marcelohva.wordpress.com

12

Desenvolvimento mvel para a plataforma Android Parte I

2011

Captulo 2 - Conceitos Fundamentais de uma Aplicao Android


As aplicaes Android so escritas em linguagem JAVA e o Android SDK compila seu cdigo para um pacote Android (Android package), um arquivo com sufixo .apk. Todo cdigo dentro de um arquivo .apk considerado como uma aplicao e este arquivo que os dispositivos Android utilizam para a instalao da aplicao. Depois de instalada no dispositivo, a aplicao vive no seu prprio Sandbox de segurana, onde: O sistema operacional Android um sistema Linux multi-usurio e cada aplicao ser um diferente usurio. Por padro, o sistema concede para cada aplicao um ID de usurio do sistema (este ID no conhecido pela aplicao). O sistema seta permisses de acesso para todos os arquivos da aplicao para que apenas o usurio com ID concedido para a aplicao possa acess-los. Como cada processo tem sua prpria mquina virtual (VM), o cdigo de cada aplicao roda isolado das outras aplicaes. Por padro, cada aplicao roda em seu processo Linux. O sistema inicia o processo quando algum componente da aplicao precisa ser executado e tambm o termina quando o mesmo no mais necessrio ou quando o sistema precisar de mais memria. Portanto o sistema Android implementa o princpio de menor privilgio para suas aplicaes, liberando acesso apenas aos componentes que a aplicao necessita para fazer seu trabalho e nada alm. Contudo existem maneiras de uma aplicao conseguir mais privilgios para poder acessar dados de outra aplicao ou acessar servios do sistema: possvel configurar duas aplicaes de maneira que elas compartilhem o mesmo ID de usurio Linux, possibilitando que ambas possam acessar os arquivos uma da outra. Uma aplicao pode pedir permisso para acessar dados do dispositivo como contatos do usurio, mensagens SMS, dispositivos de dados montados (cartes SD), camera, Bluetooth e mais. Todas as permisses devero ser concedidas pelo usurio durante a instalao da aplicao. Agora vamos ver uma breve introduo sobre quais so os principais componentes de uma aplicao. Primeiramente iremos descrever de maneira breve cada um deles para que o aluno possa ter uma viso geral e logo aps iremos cobrir com detalhe cada um dos componentes durante o resto deste captulo.

Componentes de uma aplicao


Uma aplicao composta basicamente de alguns componentes principais do framework de aplicaes, um arquivo Manifest e recursos (resources). Dentre os componentes de framework podemos citar: Activities: Uma Activity representa uma tela nica com uma interface de usurio. Por exemplo, uma aplicao de e-mail pode ter uma Activity que mostra uma lista de novos emails, outra para escrever um novo e-mail e uma terceira para ler o contedo de um e-mail. Todas essas so independentes mesmo que trabalhem juntas para apresentar uma experiencia
http://marcelohva.wordpress.com 13

Desenvolvimento mvel para a plataforma Android Parte I

2011

coesa para o usurio da aplicao. Como resultado desta independncia, uma outra aplicao pode chamar diretamente qualquer uma destas Activities (caso a aplicao de e-mail permita). Services: Service um componente que roda em background para executar tarefas de durao demorada ou para realizar trabalhos para processos remotos. Os Services no possuem interface de usurio, podendo executar msicas no plano de fundo ou baixar dados de um servidor sem ter que bloquear a tela do usurio. Um outro componente, como uma Activity pode inicializar um Service e deixa-lo rodar ou at interagir com ele. Content Providers: Um Content Provider, ou provedor de contedo, gerencia um conjunto compartilhado de dados de aplicaes. Voc pode armazenar os dados no sistema de arquivos, em um banco de dados SQLite, na web, ou em qualquer outro local de armazenamento persistente que seu aplicativo possa acessar. Por meio do provedor de contedo, outros aplicativos podem consultar ou at mesmo modificar os dados (se o provedor de contedo permitir). Por exemplo, o sistema Android fornece um provedor de contedo que gerencia informaes de contatos do usurio. Como tal, qualquer aplicao com as permisses adequadas pode consultar parte do provedor de contedo (como ContactsContract.Data) para ler e gravar informaes sobre uma pessoa em particular. Provedores de contedo tambm so teis para leitura e escrita de dados que so privados para a sua aplicao e no so compartilhados. Broadcast Receivers: Um Broadcast Receiver, ou receptor de transmisso, um componente que responde a anncios de todo o sistema de transmisso. Muitas transmisses so provenientes do sistema por exemplo, uma transmisso anunciando que o ecr foi desligado, a bateria est fraca, ou uma imagem foi capturada. Os aplicativos tambm podem iniciar as transmisses, por exemplo, para permitir que outras aplicaes saibam que alguns dados foram baixados para o dispositivo e esto disponveis para elas usarem. Embora receptores de broadcast no apresentem uma interface de usurio, eles podem criar uma notificao de barra de status para alertar o usurio quando um evento de transmisso ocorrer. O mais comum para um receptor de transmisso (broadcast receiver) ser apenas um "gateway" para outros componentes, destinando-se a fazer apenas uma quantidade muito reduzida de trabalho. Assim sendo, ele pode iniciar um servio (Service) para realizar algum trabalho que baseado em seu evento ao invs de realizar o trabalho diretamente. Uma particularidade da plataforma Android que uma aplicao pode iniciar um componente de outra aplicao. Como exemplo, se voc precisar capturar uma foto em sua aplicao voc poder utilizar uma aplicao que j faz a captura da foto e no ser necessrio escrever uma Activity para capturar a foto. Basta iniciar a Activity na aplicao da cmera que responsvel por capturar uma foto. Quando a captura estiver completa a foto retornada para sua aplicao para ser utilizada. Para o usurio como se a cmera fizesse parte da sua aplicao. Como as aplicaes rodam em seus processos separados, dentro de um sandbox de segurana, no possvel ativar diretamente componentes de outras aplicaes. Somente o sistema Android poder ativar um componente para voc, mas para isso ser necessrio enviar uma mensagem para o sistema com a inteno de utilizar determinado componente. Na plataforma Android esta mensagem recebe o nome de Intent.

Ativando componentes
Trs dos quatro tipos de componentes activities, services e receptores de transmisso (broadcast

http://marcelohva.wordpress.com

14

Desenvolvimento mvel para a plataforma Android Parte I

2011

receivers) so ativados por mensagens assncronas chamadas intent. Um intent criado a partir de um objeto Intent que define uma mensagem para ativar tanto um componente especfico ou um tipo de componente, podendo ser um intent explcito ou implcito, respectivamente. Para activities e services um intent ir definir uma ao a ser realizada e poder especificar tambm uma URI dos dados a serem utilizados, dentre outras informaes necessrias pelo componente a ser inicializado. As vezes voc poder inicializar uma activity para obter um resultado e a mesma poder retornar o resultado via intent. Para receptores de transmisso um inent dever definir apenas o anuncio a ser transmitido ( por exemplo, a transmisso para indicar que a bateria do dispositivo est fraca inclui apenas uma string conhecida que indica battery is low). Para o quarto tipo de componente, o Content Provider, no se utlilza um intent para ativao. Os provedores de contedo so ativados quando so requisitados por um ContentResolver. Iremos ver mais sobre isto na seo que detalha os provedores de contedo.

Arquivo de Manifesto
O arquivo de manifesto (Manifest File) muito importante em toda aplicao Android. O arquivo descrito em um XML que se chama AndroidManifest.xml e fica localizado na raiz dos diretrios do projeto de sua aplicao. Ele deve definir todos os componentes de sua aplicao, pois para que o sistema possa inicializar qualquer componente ele deve saber de sua existncia. Ao ler todo arquivo de manifesto o sistema reconhece os componentes que compem sua aplicao. Na definio do arquivo AndroidManifest.xml tambm podemos: Identificar permisses de usurio requeridas pela aplicao, como acesso internet ou a outro servio / componente do sistema; Declarar qual o menor nvel de API requerida pela aplicao; Declarar funcionalidades de hardware e software requeridas pela aplicao, como cmera, servio bluetooth, ou tela multitoque; Definir bibliotecas de APIs (outras alm das APIs do Framework Android) com as quais a aplicao precisa se conectar, como a biblioteca do Google Maps; Agora vamos analisar o arquivo gerado para nossa aplicao depois de executarmos os exerccios 1 e 2 do captulo anterior.
1. <?xml version="1.0" encoding="utf-8"?> 2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3. package="com.example" 4. android:versionCode="1" 5. android:versionName="1.0"> 6. <uses-sdk android:minSdkVersion="8" /> 7. <application android:icon="@drawable/icon" android:label="@string/app_name"> 8. <activity android:name=".helloandroid.HelloAndroidActivity" 9. android:label="@string/app_name"> 10. <intent-filter> <action android:name="android.intent.action.MAIN" /> 11.

http://marcelohva.wordpress.com

15

Desenvolvimento mvel para a plataforma Android Parte I

2011

12. <category android:name="android.intent.category.LAUNCHER" /> 13. </intent-filter> </activity> 14. 15. </application> 16. </manifest>

A principal tarefa do arquivo de manifesto declarar os componentes da aplicao. No trecho da linha 8 at a linha 14 temos a declarao de uma Activity. Dentro do elemento <activity> temos o atributo android:name e nele especificamos o nome qualificado da subclasse da classe Activity que queremos declarar. Em seguida temos o atributo android:label que especifica qual string ser utilizada para exibir o um label visvel da activity para o usurio. Para declarar componentes os seguintes elementos podero ser utilizados: <activity> para declarar activities <service> para declarar services <receiver> para declarar broadcast receivers <provider> para declarar content providers Activities, services e content providers que estejam em uso no cdigo da sua aplicao mas que no sejam declarados no arquivo de manifesto no estaro visveis para o sistema e, portanto, no executaro. J os broadcast receivers podero ser declarados tambm de forma dinmica no cdigo (como objetos BroadcastReceiver) e registrados no sistema com a chamada do mtodo registerReceiver(). Ainda dentro de cada componente voc poder declarar capacidades. Como vimos anteriormente voc pode iniciar um componente por meio de um Intent. Isto pode ser feito diretamente pelo nome da classe do componente desejado ou de maneira implcita com Intent actions. O verdadeiro poder de um Intent est quando utilizamos o conceito de aes pois com elas declaramos o tipo de aes que queremos executar e deixamos o sistema procurar um componente no dispositivo que possa executar essa ao e execut-lo. Caso o sistema encontre mais de um componente que possa executar a ao desejada o sistema ir deixar o usurio escolher qual deles deseja utilizar. A maneira pela qual o sistema identifica quais componentes podem responder a uma determinada ao comparando o Intent recebido com os filtros de Intent (Intent filters) declarados nos arquivos de manifesto das outras aplicaes no dispositivo. Para declararmos os intent filters de nossos componentes podemos utilizar o elemento <intentfilter> conforme pode ser visto no trecho das linhas 10 a 13. A ao MAIN define que a activity um ponto de entrada principal da aplicao e a categoria LAUNCHER define que este ponto de entrada deve ser listado no lanador da aplicao. Os conceitos de um Intent e Intent filters sero detalhados mais a frente, sendo importante, por hora, saber de sua existncia e seu funcionamento bsico.

Resources
Uma aplicao Android composta de mais do que apenas cdigo. Ela requer recursos que ficam separados do cdigo como imagens, arquivos de udio e itens relacionados com a apresentao visual da aplicao. Um exemplo so os arquivos XML de layout das activities do seu projeto. Para cada recurso adicionado no projeto da aplicao as ferramentas de build do SDK iro definir
http://marcelohva.wordpress.com 16

Desenvolvimento mvel para a plataforma Android Parte I

2011

um ID nico (inteiro) para que seja utilizado para referenciar o recurso na aplicao, seja no cdigo fonte ou em outros arquivos XML. Por exemplo, se a aplicao tiver um arquivo logo.png (salvo no diretrio /res/drawable/) o SDK ir gerar um ID para o recurso chamado R.drawable.logo que poder ser utilizado para referenciar a imagem e inseri-la na interface de usurio. Um importante aspecto de separar os recursos do cdigo que essa abordagem d uma flexibilidade na hora de utilizar diferentes recursos para diferentes configuraes de dispositivos. Essa flexibilidade vai desde utilizar arquivos de strings internacionalizados para outros idiomas a at diferentes tipos de arquivos de layout. Utilizando de alguns qualificadores a aplicao pode saber quais recursos utilizar, como veremos em detalhe em captulos posteriores.

Activities
Uma activity, conforme introduzido anteriormente, um componente de aplicao responsvel por prover uma tela para que os usurios possam interagir para realizar um objetivo, seja discar um nmero de telefone, enviar um e-mail, tirar uma foto, etc. Uma aplicao geralmente composta de vrias activities, que so fracamente acopladas entre si. Tipicamente uma activity definida como a principal e esta que apresentada para o usurio quando a aplicao inicializada pela primeira vez.

Criando uma Activity


Para criar uma activity precisamos criar uma subclasse de Activity (ou uma subclasse existente dela). Na subclasse criada necessrio implementar mtodos de callback que o sistema chama durante as diversas transies de estado da activity. Os dois principais mtodos so: onCreate(): Este mtodo deve ser implementado. O sistema o chama quando est criando a sua activity. Na sua implementao voc deve inicializar os componentes essenciais da sua activity. E o mais importante, aqui o local aonde deve ser chamado o mtodo setContentView() para definir o layout da interface do usurio da activity. onPause(): O sistema chama este mtodo como primeiro indcio de que o usurio est saindo da sua activity (embora isso nem sempre quer dizer que a activity ser destruda). Normalmente aqui o local aonde as mudanas que precisam ser persistidas sero salvas para alm da sesso do usurio (visto que o usurio pode no retornar). Outros mtodos sero tratados no tpico sobre o ciclo de vida das activities.

Implementando uma interface de usurio


A interface de usurio de uma activity composta de uma hierarquia de objetos derivados da classe View. Cada view controla um espao retangular particular na janela de uma activity e pode responder interao do usurio. Por exemplo, uma view pode ser um boto que inicia uma ao quando o usurio o toca. O framework Android prove uma srie de views prontas para serem utilizadas na definio e organizao do layout de suas aplicaes. Os Widgets so views que provm elementos visuais (e interativos) para a tela, como botes, campos de texto, checkboxes, etc. Os Layouts so views derivadas do objeto ViewGroup que provm um modelo de layout nico para suas views filhas, como layout linear, de grid ou relativo. O jeito mais comum de definir um layout por meio de um arquivo de layout em XML salvo dentro
http://marcelohva.wordpress.com 17

Desenvolvimento mvel para a plataforma Android Parte I

2011

dos diretrios de recursos da aplicao. Voc pode setar o layout como tela de interface do usurio para sua activity utilizando o mtodo setContentView(), passando como parmetro o ID do recurso referente ao layout escolhido. Maiores detalhes sobre Interfaces de Usurio sero dados no capitulo referente ao tema.

Ciclo de Vida
Para entendermos melhor como funcionam as activities iremos estudar seu ciclo de vida e como uma activity se comporta diante de outras activities do sistema. Cada activity pode iniciar outra activity para executar uma outra ao. Toda vez que uma nova activity inicializada o sistema para a activity anterior e a preserva em uma pilha de retorno (back stack). Quando a nova activity inicializada ela colocada na pilha de retorno (back stack) e ganha o foco do usurio. A pilha de activities respeita o mecanismo LIFO, ou seja, Last In First Out ltimo a entrar primeiro a sair e assim que o usurio terminar com a activity atual e pressionar o boto BACK a mesma retirada da pilha e destruda. Com isso a activity anterior resumida e ganha o foco novamente. O ciclo de vida de uma activity diretamente afetado por sua associao com outras activities, sua tarefa e a pilha de retorno (back stack). Uma activity pode existir em essencialmente trs estados: em execuo (Resumed ou Running): A activity est no primeiro plano da tela e tem o foco do usurio. em pausa (Paused): Outra atividade est em primeiro plano e possui o foco, mas esta activity ainda est visvel. Ou seja, existe uma activity visvel em cima desta mas essa transparente ou no cobre toda tela. Uma activity em pausa est completamente viva (o objeto da activity retido na memria, ele mantm todas as informaes de estado e membros, e permanece ligado ao gerenciador de janelas), mas pode ser destruda pelo sistema em situaes de memria extremamente baixa. interrompida (Stopped): A activity est completamente obscurecida por outra (a activity est agora no "background"). A activity interrompida tambm est viva (o objeto da activity retido na memria, ele mantm todas as informaes de estado e membros, mas no possui mais ligao com o gerenciador de janelas). No entanto, ela no mais visvel para o usurio e pode ser destruda pelo sistema quando a memria for necessria em outro lugar. Quando uma activity est em pausa ou est interrompida o sistema pode retir-la da memria seja pedindo para que ela finalize (chamando seu mtodo finish()) ou simplesmente destruindo seu processo. Quando uma activity reaberta (depois de terminada ou destruida), ela precisa ser criada totalmente do zero. Para melhor entender como funcionam essas trocas de estado do ciclo de vida de uma activity temos que analisar os mtodos de Callbacks que a plataforma Android prov. Esses mtodos podem ser implementados no cdigo de sua activity para lidar com suas mudanas de estado. O sistema Android responsvel por chamar esses mtodos de callback durante o ciclo de vida de uma atividade. A seguir a lista de mtodos de callback disponveis: protected void onCreate(Bundle savedInstanceState);

http://marcelohva.wordpress.com

18

Desenvolvimento mvel para a plataforma Android Parte I

2011

protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); Ao sobrescrever os mtodos acima recomendado a chamada do mtodo sobrescrito antes de qualquer outra ao (utilizando super), conforme trecho a seguir:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.onCreate(savedInstanceState); .onCreate(savedInstanceSt TextView tv = new TextView(this this); this tv.setText("Hello World!"); setContentView(tv); }

Existem alguns loops dentro do ciclo de vida de uma activity, que podem ser subdivididos em: O ciclo completo, que acontece entre a chamada de onCreate() e onDestroy(). Sua activity deve configurar seu estado global (como definio de um layout) no mtodo onCreate(), e liberar os recursos remanescentes no mtodo onDestroy(). Por exemplo, uma thread de download que executa em plano de fundo, deve ser criada no mtodo onCreate() e destruda no onDestroy(). O tempo de vida visvel, que ocorre entre as chamadas de onStart() e onStop(). Durante este perodo o usurio pode ver a activity na tela e interagir com ela. Por entre esses mtodos voc deve manter os componentes que so necessrios para a exibio da activity para o usurio. O tempo de vida em primeiro plano, que ocorre entre as chamadas de onResume() e onPause(). Durante este tempo a activity se encontra no primeiro plano da tela e possui foco de entradas do usurio. Como nesse perodo a activity pode oscilar bastante entre primeiro plano e plano de fundo, os mtodos onResume() e onPause() podem ser acessados vrias vezes, portanto o cdigo desses mtodos deve ser leve para no gerar lentido nas transies e espera por parte do usurio. Agora veja no diagrama da figura abaixo todo o ciclo de vida e quando ocorrem as chamadas aos mtodos citados anteriormente.

http://marcelohva.wordpress.com

19

Desenvolvimento mvel para a plataforma Android Parte I

2011

Figura 7 - Ciclo de vida de uma Activity - developers.android.com

http://marcelohva.wordpress.com

20

Desenvolvimento mvel para a plataforma Android Parte I

2011

Salvando o estado
Conforme mencionado anteriormente, quando uma activity pausada ou parada (onPause() e onStop()) seu estado retido porque seu objeto mantido em memria. Com isso toda informao sobre seus membros e estados so mantidas no objeto salvo em memria. Ento todas as mudanas efetuadas pelo usurio sero mantidas quando a activity voltar ao primeiro plano. Isso resolve o problema de manter o estado de uma activity para quando o objeto dela residir na memria, mas vimos anteriormente que isso no garantido visto que o sistema pode destruir seu objeto para recuperar memria. Nestes casos ao retomar uma activity que fora destruda o sistema deve recriar o seu objeto do zero. O usurio no fica ciente do que ocorre - ou seja, no sabe se uma activity que ele deixou em segundo plano foi destruda pelo sistema ou no e espera que suas modificaes sejam mantidas quando retornar para uma activity que ficou em segundo plano. Para resolver este problema o desenvolvedor deve fazer uso de um mtodo de callback chamado onSaveInstanceState(). O sistema chama este mtodo toda vez que ele vai tornar uma activity vunervel a ser destruda. Ele passa para ele um objeto de mapa de valores nome-valor. Neste objeto o desenvolvedor pode salvar informaes importantes de serem mantidas da activity com o uso do mtodo putString(). Ao recriar a activity o sistema passa este objeto para o mtodo onCreate(). A implementao default do onSaveInstanceState() j salva bastante informao sobre os componentes de interface de usurio, mas mesmo assim, para salvar informaes adicionais necessria a sobrescrita do mtodo por parte do desenvolvedor. Abaixo os dois casos citados so exemplificados em diagramas. No primeiro o objeto permanece em memria e no necessrio restaurar informaes de estado ao recriar a activity. No segundo no, o sistema precisa recriar o objeto e caso no existam salvaguardas para informaes de estado elas podem ser perdidas.

Figura 8 - Diagramas exemplificando como os dados de estado so retomados

http://marcelohva.wordpress.com

21

Você também pode gostar