Hoje iremos conhecer uma das mais importantes classes de uma aplicação Android: A classeActivity.
No post “Criando um projeto Android (Helloworld!)” comecei a falar sobre ela:
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 umresultado 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?
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