As emocionantes aventuras de um sysadmin linux na procura pelo uptime perfeito!

Programando Androids – Parte 4

Posted: maio 14th, 2009 | Author: coredump | Filed under: Programação | Tags: ,

android_t1Na parte 3 falei sobre o gerenciamento de memória. Também falei sobre o cuidado que se deve ter para manter o estado da aplicação consistente entre as várias mudanças que o Android OS executa automaticamente.

Ciclo de vida de uma aplicação no Android

Vale lembrar que uma “aplicação” no Android é na verdade uma Activity, ou um conjunto de Activities, que podem ser consideradas as “janelas” da aplicação. Cada Activity é considerada separadamente, mesmo que esteja dentro da mesma Aplicação.

O ciclo de vida de Services é bem diferente do ciclo de vida de uma Activity e não vem ao caso para este post.

A imagem abaixo (novamente cortesia do Google) demonstra o ciclo de vida básico de uma Activity.

activity_lifecycleAs ovais coloridas são os estados em que a Activity pode estar, enquanto os retângulos cinzas são os nomes de métodos de callback que serão invocadas pelo OS em cada transição. Ou seja, de quando uma Activity inicia até ela ser mostrada na tela, ela executará o código dos métodos onCreate, onStart e onResume. Os retângulos brancos com texto em itálico descrevem a ação necessária para causar os callbacks ou mudanças de estado.

Você não precisa implementar todos os callbacks, mas existem certas funcionalidades que só estão disponíveis em determinados contextos de callback e coisas que simplesmente não funcionam em alguns lugares. Por exemplo: animações, se colocadas no onResume, não iniciam. As funcionalidades para gravação de estado da aplicação são melhor aplicadas no onPause, mas este método é desenhado para ser executado rapidamente, então cuidado com o que se colocar ali.

Também é importante notar neste gráfico que sua aplicação pode ser morta caso o sistema precise de memória, e é importante dar o tratamento correto aos dados/estados que precisem ser mantidos (como em um jogo, salvar posições de objetos, valores e etc..). Outra coisa a se notar é que a Activity vai ser destruída na mudança de orientação (quando a tela roda, automaticamente ou pela abertura do teclado nos G1), e isso deve ser levado em conta (código no onCreate pode acabar sendo rodado duas vezes no caso de uma mudança de orientação).

Exemplos

Tirando o fato de que eu mal sei programar em Java, meu programa Lanterna foi um bom aprendizado sobre esses estados e o ciclo de vida da aplicação.

Por exemplo, o Lanterna requer que o telefone fique sempre ligado quando funcionando (ótima forma de se acabar com a bateria). Para isso eu precisei requerer uma parada chamada WakeLock, disponível no serviço de gerenciamento de energia (PowerManager). No onCreate eu requisito ao Android o acesso ao serviço:

/* PowerManager interface to get and release the WakeLocks later */
PowerManager pmanager = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.wakelock = pmanager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
"Lanterna Lock");

A variável wakelock (ou atributo, sei lá como Java chama isso), foi criada anteriormente, só olhar o código inteiro para entender. Como isso é uma referência ao serviço e nada mais, ele ser recriado a cada vez que a Activity for ativada não faz diferença. O cuidado tem de se ter ao adquirir e liberar a WakeLock, que significa basicamente ativar ou desativar a trava que vai deixar o telefone dormir ou não. Eu faço isso no onPause e no onResume, desta forma a trava é adquirida na primeira vez que a Activity é iniciada e quando ela volta a ser a Activity mostrada na tela (o onResume é chamado nessas duas situações), e é liberada sempre que alguma outra coisa entra na frente (para evitar que o telefone nunca mais durma):

@Override
public void onResume() {
super.onResume();
...
/* Get the WakeLock */
this.wakelock.acquire();

E o código para liberar a trava:

@Override
public void onPause() {
super.onPause();
/* Releases the WakeLock */
this.wakelock.release();
}
Compartilhe:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Slashdot
  • StumbleUpon
  • Technorati
  • TwitThis
  • Identi.ca
  • Twitter

Posts relacionados:

  1. Programando Androids – Parte 3 Continuando com meus posts sobre programação Android, mesmo desanimado pelo...
  2. Programando Androids – Parte 1 Nos últimos dias eu vendi meu HTC Tytn II e...
  3. Programando Androids – Parte 2 Ferramentas do SDK: Uma das coisas que eu realmente gostei...

1 Comment »

One Comment on “Programando Androids – Parte 4”

  1. 1 Daniel said at 17:07 on outubro 27th, 2009:

    Opa.

    Sou programador também… fiz alguns para Android e um deles tem potencial de vendas.. Nunca publiquei nada no Marketplace, mas vi que não vou poder vender nada pois o Google Checkout não suporta o Brasil..

    Conhece alguma forma de publicar apps pagas na Android Market?

    Abraços!


Leave a Reply