Vous êtes sur la page 1sur 26

A vidades: fundamentos e ciclo

de vida
Prof. Diogo S. Mar ns
santana.mar ns@ufabc.edu.br

MCZA033 - Programação Avançada para Disposi vos


Móveis

10 de junho de 2019

Crédito de parte das imagens, a menos se especificado: Wikipedia


Obje vos

Compreender o ciclo de vida de uma A vidade


Compreender os relacionamentos entre A vidades e
Tarefas
Pra car o desenvolvimento de A vidades

1 / 23
Revisão: componentes de uma aplicação Android

Componentes a váveis
1 A vidades
2 Serviços
3 Provedores de Conteúdo
4 Receptores de Broadcast
Componentes de a vação
1 Intents
A váveis: pontos de
entrada
A vação: comunicação
Adaptado de: https://prezi.com/guq68qnmknbi/ entre componentes
android-application-architecture-garima/

2 / 23
Revisão: A vidades

A vidade
Representa uma tela única de uma aplicação Android.

uma aplicação: 1 ou mais a vidades (telas)


cada a vidade é um ponto de entrada da aplicação
depende da configuração
classe-base: android.app.Activity

3 / 23
Relação Aplicação-A vidades
1 aplicação: n a vidades

Intent Intent

Atividade 1 Atividade 2 Atividade 3

A vação de tarefas: intent


intra-aplicação
inter-aplicação
4 / 23
Tarefas (Tasks)
Tarefa
Conjunto de A vidades com as quais o usuário interage para
a ngir algum obje vo.

Sequência de A vidades relacionadas


Variações:
mesma aplicação
múl plas aplicações

Empilhamento: a vação de
a vidade (via intent)
Pilha de histórico (Back Stack)
Desempilhamento:
Estrutura de dados que
botão“back”
organiza temporalmente as
a vidades de uma tarefa.

5 / 23
Tela de Overview

Interface do sistema que


lista a vidades e tarefas
Manipulações de tarefas
implicam em modificações
na tela de Overview

6 / 23
Back Stack: exemplo

http://developer.android.com/guide/components/tasks-and-back-stack.html

7 / 23
Back Stack: simulação

Créditos: Dr. Adam Porter, University of Maryland, EUA

empilhamento: a vidade “a vada”


desempilhamento: a vidade “desa vada”
“a vação” e “desa vação”: ciclo de vida
8 / 23
Back Stack: mul tasking

http://developer.android.com/guide/components/tasks-and-back-stack.html

Múl plas tarefas “em memória”


Chaveamento de tarefas
Apenas a vidade com foco executa
Apenas tarefa que possui a vidade com foco executa

9 / 23
Back Stack: instanciação de tarefas
Comportamento padrão

http://developer.android.com/guide/components/tasks-and-back-stack.html

10 / 23
Back Stack: instanciação de tarefas
Comportamento singleTask

Uma a vidade em “launch mode” singleTask é instanciada uma única vez, fazendo migrar toda a pilha em que foi
inicialmente criada. Fonte: http://developer.android.com/guide/components/tasks-and-back-stack.html

11 / 23
Ciclo de vida de uma A vidade

Ciclo de vida via MEF Arestas (transições)


(máquina de estados Para cada estado, um
finitos) método de callback:
Vér ces (estados): onCreate()
criada onStart()
iniciada onResume()
restaurada
onPause()
pausada
parada onRestart()
reiniciada onStop()
destruída onDestroy()

12 / 23
Ciclo de vida de uma A vidade

13 / 23
Ciclo de vida: métodos callback
onCreate()
configura estado global
renderiza e configura a interface do usuário
super.onCreate()
setContentView()
onRestart()
chamada após a a vidade ser parada (mas ainda na memória)
restaura o estado da aplicação
onStart()
a vidade prestes a ser visualizada
onResume()
Inicia a exibição da a vidade
onPause()
o foco vai ser transferido para outra a vidade
onStop()
a vidade não está mais visível
onDestroy()
a vidade vai ser removida da memória
14 / 23
Demonstração:
Rastreando o ciclo de vida de
uma A vidade
Obje vo: visualizar o ciclo de vida de a vidades por meio
da instrumentação dos métodos callback
Material: projeto aula3/TraceActivityLifeCycle, no
BitBucket

15 / 23
Demonstração: ciclo de vida de uma a vidade
A aplicação demo é simples:
NameInputActivity tem uma TextView e um Bu on
O usuário digita um nome e aperta o botão
Um intent abre a MessageRenderAc vity, passando o nome
MessageRenderActivity tem uma TextView que exibe o
nome recebido

16 / 23
Demonstração: ciclo de vida de uma a vidade
Para rastrearmos o ciclo de vida de NameInputActivity, instrumentamos
cada método de ciclo de vida com mensagens de log rotuladas:

1 @Override 24 (...)
2 protected void onCreate ( Bundle 25 Log .d( LOGTAG , ME + " paused " );
3 savedInstanceState ) { 26 }
4 (...) 27
5 Log . d ( LOGTAG , ME + " created " ); 28 @Override
6 Log . d ( LOGTAG , ME + " task id is " 29 protected void onStop () {
7 + this . getTaskId ()); 30 (...)
8 } 31 Log .d( LOGTAG , ME + " stopped " );
9 32 }
10 @Override 33
11 protected void onStart () { 34 @Override
12 (...) 35 protected void onDestroy () {
13 Log . d ( LOGTAG , ME + " started " ); 36 (...)
14 } 37 Log .d( LOGTAG , ME + " destroyed " );
15 38 }
16 @Override 39
17 protected void onResume () { 40 @Override
18 (...) 41 protected void onRestart () {
19 Log . d ( LOGTAG , ME + " resumed " ); 42 (...)
20 } 43 Log .d( LOGTAG , ME + " restarted " );
21 44 }
22 @Override
23 protected void onPause () {

Fazemos uma instrumentação análoga em MessageRenderActivity


17 / 23
Demonstração: ciclo de vida de uma a vidade
Após instrumentar, podemos observar as mensagens de log na aba
Logcat do Android Studio
Filtrar por LIFECYCLETEST (tag que aplicamos nas mensagens de log)
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : NameInputActivity : created
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : NameInputActivity : task id is 3
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : NameInputActivity : started
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : NameInputActivity : resumed
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : NameInputActivity : paused
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : MessageRenderActivity : created
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : MessageRenderActivity : task id is 3
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : MessageRenderActivity : started
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : MessageRenderActivity : resumed
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : NameInputActivity : stopped
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : MessageRenderActivity : paused
(...). ufabc . traceactivitylifecycle D/ LIFECYCLETEST : MessageRenderActivity : stopped

NameInputAc vity passa por created -> started -> resumed -> paused
MessageRenderAc vity passa por created->started->resumed
Após MessageRenderAc vity estar renderizada, NameInputAc vity
passa por stopped
Quando rei o app de foco, MessageRenderAc vity passou por paused e
stopped
Se eu matasse o app, iria para destroyed
Note que tanto NameInputAc vity quanto MessageRenderAc vity estão
na mesma task
18 / 23
A vidades e mudanças de configuração

Mudanças de configuração
Mudança de orientação da tela
Disponibilidade de teclado sico
Mudança de idioma
etc.
Afetam o ciclo de vida da A vidade a va
A vidade é destruída
(Estado é salvo)
A vidade é (re-)criada
Manutenção de estado
automá co: componentes de interface padrão
manual: outros componentes customizados
nas a vidades: técnica obsoleta
(onRetainNonConfigurationInstance() e
getLastNonConfigurationInstance())
veremos adiante: veremos em “Fragmentos”

19 / 23
Demonstração:
Efeitos de mudanças de
configuração no ciclo de vida de
uma a vidade
Obje vo: visualizar como uma mudança de configuração
(e.g. orientação da tela) afeta o ciclo de vida de a vidades
Material: projeto aula3/TraceActivityLifeCycle, no
BitBucket

20 / 23
Mudança de configuração e ciclo de vida da a vidade

Para fazermos esse teste, precisamos habilitar a opção de


auto-rotate da tela
Após habilitar, mudamos a orientação do disposi vo
(landscape vs. portrait)
Analisando o logcat:
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : paused
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : stopped
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : destroyed
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : created
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : task id is 4
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : started
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : resumed
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : paused
(....). ufabc . traceactivitylifecycle D / LIFECYCLETEST : MessageRenderActivity : resumed

Note que uma mudança de configuração destrói e recria a


a vidade

21 / 23
Prá ca:
Construir aplicação de mapas.
Obje vo: construir aplicação de pesquisa em mapa
Material: roteiro será indicado na aula

22 / 23
Leituras complementares

Ac vi es. Android API Guides. URL: http://developer.


android.com/guide/components/activities.html
Tasks and Back Stack. URL: http://developer.android.
com/guide/components/tasks-and-back-stack.html
Handling run me changes. URL:
http://developer.android.com/guide/topics/resources/
runtime-changes.html
Overview screen. URL: https://developer.android.com/
guide/components/recents.html

23 / 23
Até a próxima aula
A vidades: fundamentos e ciclo
de vida
Prof. Diogo S. Mar ns
santana.mar ns@ufabc.edu.br

MCZA033 - Programação Avançada para Disposi vos


Móveis

10 de junho de 2019

Crédito de parte das imagens, a menos se especificado: Wikipedia

Vous aimerez peut-être aussi