Modos de inicialização de Activity

Modos de inicialização de Activity – standard

Em projetos reais, precisamos definir o modo de inicialização correto para cada Activity conforme os requisitos.

São quatro modos de inicialização:

standard, singleTop, singleTask e singleInstance

Configuramos o atributo launchMode da Activity no AndroidManifest.xml

standard é o modo padrão de inicialização

Se não escrever nada, todas as Activities usam esse modo por padrão

Nesse modo, cada nova Activity é colocada no topo da pilha

O sistema não verifica se essa Activity já existe na pilha.

Toda vez que for iniciada, uma nova instância da Activity é criada

Activity principal –> Activity comum —> abrir activity principal (nova)

Para essa nova activity principal, o sistema ignora a instância anterior

Vamos fazer uma demonstração abaixo

Adicione um botão na activity principal. No evento de clique desse botão, usamos Intent para abrir novamente a activity principal

Dúvida: parece que basta apertar voltar uma vez para sair do aplicativo

Ainda não sabemos o motivo disso

Se algum aluno descobrir, compartilhe com a turma.

Modos de inicialização de Activity – singleTop

Quando definimos o modo singleTop para uma Activity: ao iniciá-la, se ela já estiver no topo da pilha de retorno, reutilizamos essa instância e não criamos uma nova.

Vamos testar. No AndroidManifest.xml configuramos o atributo launchMode da activity principal como singleTop

Depois, não importa quantas vezes clicarmos no botão, nenhuma nova activity principal é criada, e o log aparece apenas uma vez.

Apertando o botão voltar uma vez, saímos do app Android

Mas se a Activity não estiver no topo da pilha, ainda assim pode ser criada uma nova instância

Vamos testar alterando o Intent, dessa vez vamos abrir

uma outra Activity, depois abrimos a activity principal a partir dessa segunda Activity.

O ponto principal: quando estamos na segunda Activity, o topo da pilha não é a activity principal, então nesse caso criamos uma nova activity principal.

I/Choreographer: Skipped 37 frames!  The application may be doing too much work on its main thread.Code language: HTTP (http)

Problema: botão voltar abre a área de trabalho (das duas aulas anteriores)

Isso aconteceu porque colocamos uma linha finish(); extra no evento do botão

Log.e(TAG, this.toString()); usado para registrar o endereço de memória da Activity atual

Modo singleTask

Usando singleTask garantimos que só exista uma única instância dessa Activity em todo o aplicativo.

Já o singleTop só garante uma única instância quando ela está no topo da pilha.

Modo singleInstance e Tarefas Task

Nesse modo, o sistema cria uma nova pilha de retorno para gerenciar essa Activity

Por exemplo, temos três Activities. Se definirmos launchMode=singleInstance para a segunda Activity, ela será controlada por uma pilha de retorno separada.

Nesse cenário navegamos da primeira Activity para a segunda, depois da segunda para a terceira

Se apertarmos voltar na terceira Activity, voltamos primeiro para a primeira, pois a primeira e a terceira compartilham a mesma pilha de retorno.

Depois, ao apertar voltar na primeira Activity, vamos para a segunda. Nesse momento a pilha da primeira Activity está vazia, então o sistema pega o elemento do topo da outra pilha de tarefa do app, que é a Activity 2. Se apertar voltar novamente, voltamos para a área de trabalho.

public void onClick(View view){
    Intent it = new Intent(AtividadeNormal.this,Atividade3.class);
    startActivity(it);
    finish();
}Code language: JavaScript (javascript)
05-13 08:14:26.890 4746-4746/com.foxdevelop.www.lifedemo E/Atividade principal: 113
05-13 08:14:33.755 4746-4746/com.foxdevelop.www.lifedemo E/Atividade comum: 114
05-13 08:14:37.932 4746-4746/com.foxdevelop.www.lifedemo E/Terceira atividade: 113

Modos de inicialização de Activity

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *