Hoje iremos conhecer uma das mais importantes classes de uma aplicação Android: A classe Activity.
No post “Criando um projeto Android (Helloworld!)” comecei a falar sobre ela:
Uma Activity é basicamente uma classe gerenciadora de UI (Interface com o usuário). Todo aplicativo android começa por uma Activity.
Ou seja, quando uma aplicação android é executada, na verdade é a sua Activity principal que é lançada.
Ciclo de vida de uma Activity
Uma das coisas que é importante conhecer sobre a Activity é o seu ciclo de vida. E para explicá-lo, nada melhor do que o seguinte diagrama*:
Este diagrama é de fundamental importância para o correto entendimento do funcionamento de uma aplicação android. Ele introduz, implicitamente, os estados que uma Activity pode estar, os quais explico no desenho abaixo:
Voltando ao diagrama do ciclo de vida, temos as seguintes funções:
- onCreate() É a primeira função a ser executada quando uma Activity é lançada. Geralmente é a responsável por carregar os layouts XML e outras operações de inicialização. É executada somente uma vez durante a “vida útil” da Activity.
- onStart() É chamada imediatamente após a onCreate() – e também quando uma Activity que estava em background volta a ter foco.
- onResume() Assim como a onStart(), é chamada na inicialização da Activity (logo após a própria onStart()) e também quando uma Activity volta a ter foco. Qual a diferença entre as duas? A onStart() só é chamada quando a Activity não estava mais visível na tela e volta a ter o foco, enquanto a onResume() sempre é chamada nas “retomadas de foco”.
- onPause() É a primeira função a ser invocada quando a Activity perde o foco (ou seja, uma outra Activity vem à frente).
- onStop() – Análoga à onPause(), só é chamada quando a Activity fica completamente encoberta por outra Activity (não é mais visível).
- onDestroy() A última função a ser executada. Depois dela, a Activity é considerada “morta” – ou seja, nao pode mais ser relançada. Se o usuário voltar a requisitar essa Activity, outro objeto será contruído.
- onRestart() Chamada imediatamente antes da onStart(), quando uma Activity volta a ter o foco depois de estar em background.
Executando uma Activity
Já sabemos que quando a sua aplicação é executada, a Activity definida como padrão (na criação do projeto) é lançada. Mas eu posso criar outras Activities?
É claro que sim.
E para executar outras Activities, basta usar as funções startActivity() e startActivityForResult(). No exemplo abaixo, lançamos uma segunda Activity a partir da principal, e esperamos um resultado dela – como se fosse um retorno de função.
static final int PICK_CONTACT_REQUEST = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startActivityForResult(
new Intent(Intent.ACTION_CONTACT_REQUEST,
new Uri("content://contacts")),
CONTACT_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
// fazer alguma coisa...
}
}
}
Quando a segunda Activity terminar a sua execução, a função onActivityResult() será invocada, com o “resultado” como parâmetro.
Mas como uma Activity define o seu resultado, a ser lido por aquela que a chamou?
Isso é feito invocando-se a função setResult (int resultCode), como por exemplo:
setResult(Intent.RESULT_OK);
Alguém percebeu que eu não disse nada sobre os parâmetros da startActivityForResult()? Isso é porque este é o assunto do meu próximo post – o mecanismo de Uris em Android. Até lá!

*diagrama traduzido de http://developer.android.com/reference/android/app/Activity.html
Posts Relacionados



olá Felipe,
Estou acompanhando seu tutorial sobre Android e tive alguns pequenos problemas ao executar esse exemplo. Agora a pergunta é, esse código tá completo ??
Oi Ricardo! O codigo deste post ainda não está completo. O post que estou escrevendo, e devo postar até o fim da semana, trará a segunda parte, que irá completar o exemplo. Valeu!
Olá Felipe,
Gostaria de saber como se faz para dar um tempo (sleep), antes de abriri uma outra Activity.
Obrigado,
Claudio
Oi Cláudio,
O que você pode fazer é criar uma thread que irá invocar essa Activity, e antes de lançar a Activity, colocar um sleep() com o tempo que você deseja de delay.
Olá Felipe,
Fiquei com uma dúvida no seguinte trecho deste post:
” * onStop() – Análoga à onStart(), só é chamada quando a Activity fica completamente encoberta por outra Activity (não é mais visível).”
Acredito que onde lê-se “onStart()” o correto seria “onPause()”. Estou correto ou será que não entendi corretamente o texto???
Oi Jailto,
Sim, você está certo… valeu por apontar o erro! acabei de corrigir!
Valeu!!
Boa Noite
No meu eclipse onde está as linhas: ACTION_CONTACT_REQUEST, new Uri(“content://contacts”)), CONTACT_REQUEST.
Está retornando erro, o que pode ser?
O eclipse diz que não existe as variáveis.
Ah não para de escrever não tá muito legal \o/
Olá Felipe,
Também estou enfrentando os mesmos problemas que o Nilber.
Aparentemente não existe o ACTION_CONTACT_REQUEST no objeto Intent.
Como resolver?
Obrigado, e parabéns pelo blog!
Olá felipe boa tarde,
estou com o mesmo problema do flávio e do Nilber.
eu estou com o mesmo problema do Flávio, do Nilber e do Leonardo!
Ola Felipe
As classes corretas a serem importadas são: android.content.Intent e
android.net.Uri.
Pois se forem, então existe algum problema pois acusa a mesma mensagem que o Flávio, Nilber, Leonardo e Max comentaram.
Oi Pessoal,
Desculpem a demora, estive fora do blog nos últimos dias.
Sim, conforme o Douglas mencionou, é necessário importar as classes android.content.Intent e android.net.Uri
Obrigado!
Parabéns pelos seus tutoriais,
Consegui corrigir todos os erros, exceto pela parte do Uri…
Assim que der, termine o post…
Cara esta muito bom, mais spo falta vc especificar em que classe vc esta adicionando os códigos.
Estou meio perdido onde coloca os códigos.
Abraços.
Valeu João!
Esse codigo deve ser colocado na MainActivity.
Obrigado!
Olá Felipe,
também não consegui executar o código. Está apresentando problemas no método “startActivityForResult”. Todos os parâmetros estão apresentando problemas.
Poderia colocar para download o código que usou para esse exemplo?
Oi Flávio,
o código completo está disponivel para download em http://www.felipesilveira.com.br/2010/12/quicknotes-o-projeto-android-inteiro-para-download/
Obrigado!
Olá, Felipe!
Estou com uma dúvida referente ao início das aplicações.
Elas só podem iniciar por uma Activity?
Não tem como começar por um Service, rodando em background?
Não posso chamar um Service e iniciar meu aplicativo através de um BroadcastReceiver?
Muito obrigado! Excelente post!
Olá Felipe,
Eu preciso de um sistema Dialer para o celular discar sozinho. Eu tenho o fluxograma dele. Você faz esse tipo de trabalho? Podemos conversar melhor sobre isso? Abraços.