Entendendo o modo de lançamento da atividade no Android

Partilhar é cuidar!

O modo de lançamento da atividade está desempenhando um papel importante para manter a tarefa e a pilha de retorno. Antes de explicar o modo de lançamento, precisamos primeiro entender qual é a tarefa e a pilha de retorno?

Task

Uma tarefa é uma “pilha de Atividades” na sua aplicação. Se uma Activity é enviada para o fundo (pressionando a tecla HOME enquanto a visualiza, por exemplo) então toda a Task (e todas as Activities dentro dela) também será enviada de volta. Se o utilizador clicar na sua aplicação, a tarefa (e a ordem das suas actividades) será apresentada. Em outras palavras, Uma tarefa é um conjunto de atividades com as quais os usuários interagem ao realizar um determinado trabalho. As atividades são organizadas em uma pilha – a pilha de trás)- na ordem em que cada atividade é aberta.

Então basicamente Quando um usuário lança um aplicativo a partir do ícone home, ele navega através de diferentes telas tão diferentes atividades colocadas uma em cima da outra. Esta coleção de atividades é conhecida como tasks.

Back Stack

Activities are arranged in the order in which each activity is opened.

Activities are arranged in the order in which each activity is opened.

Back Stack Esta pilha mantida chamada Back Stack (Pilha de Volta). Quando você inicia uma nova atividade usando startActivity(), ela “empurra” uma nova atividade para sua tarefa, e coloca a atividade anterior na pilha de trás.

Após você pressionar o botão voltar, então “pops” a atividade mais alta e removê-la da pilha de trás e levá-lo de volta para a atividade anterior.

Modo de lançamento

Um “modo de lançamento” é a forma em que uma nova instância de uma atividade deve ser associada com a tarefa atual. Os modos de lançamento podem ser definidos usando um de dois mecanismos:

  1. Por declarar no arquivo AndroidManifest.xml
  2. Por adicionar a bandeira com Intent.

Existem quatro tipos se modo de lançamento de atividade. Estes são:

  1. standard
  2. singleTop
  3. singleTask
  4. SingleInstance

Arquivo doManifest: Ao declarar uma atividade em um arquivo manifesto, você pode especificar como a atividade deve se associar às tarefas quando inicia.

Exp:

<activity android:launchMode = ../>

Bandeira interna: O Android também fornece bandeiras de atividade pelas quais você pode alterar o comportamento padrão da associação da atividade com as tarefas enquanto a inicia através do método startActivity(). Estes flags podem ser passados por dados extras Intent.

FLAG_ACTIVITY_NEW_TASK -> similar to "launchMode = singleTask"FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_SINGLE_TOP -> similar to "launchMode = singleTop"FLAG_ACTIVITY_CLEAR_TOP

standard (padrão) : Este é o modo comum para a maioria das atividades. Múltiplas instâncias da classe de atividade podem ser instanciadas e múltiplas instâncias podem ser adicionadas à mesma tarefa ou tarefas diferentes.

Exemplo:
Suponha que você tenha atividades A, B, C, e D e sua atividade B tenha “modo de inicialização = padrão”. Agora você lança novamente a atividade B –
Estado da Pilha de Atividades antes do lançamento B
A -> B -> C -> D
Estado da Pilha de Atividades após o lançamento B
A -> B -> C -> D -> B

singleTop : A diferença em relação ao padrão é que se uma instância da atividade já existe no topo da tarefa atual e o sistema encaminha a intenção para essa atividade, nenhuma nova instância será criada porque disparará um métodoonNewIntent() ao invés de criar um novo objeto.

Exemplo:
Caso 1:
Suponha que você tem atividades A, B, e C e sua atividade D tem “modo de lançamento = singleTop”. Agora você lança a atividade D –
Estado da pilha de atividades antes do lançamento D
A ->B ->C
Estado da pilha de atividades após o lançamento D atividade
A ->B ->C ->D (Aqui D lança como de costume)
Caso 2:
Suponha que você tem atividades A, B, C e D e sua atividade D tem “modo de lançamento = singleTop”. Agora você lança novamente a atividade D –
Estado da Pilha de Atividade antes do lançamento D
A -> B -> C -> D
Estado da Pilha de Atividade após o lançamento D atividade
A -> B -> C -> D (Aqui a velha instância é chamada e intent data route através de onNewIntent() callback)

singleTask : Uma nova tarefa será sempre criada e uma nova instância será empurrada para a tarefa como a raiz. Entretanto, se alguma instância de atividade existir em alguma tarefa, o sistema encaminha a intenção para essa instância de atividade através do métodoonNewIntent() chamada. Neste modo, as instâncias de atividade podem ser empurradas para a mesma tarefa. Este modo é útil para atividades que atuam como pontos de entrada.

Exemplo:
Caso 1:
Suponha que você tem atividades A, B e C e sua atividade D tem “modo de lançamento = singleTask”. Agora você lança a atividade D –
Estado da Pilha de Atividades antes do lançamento D
A ->B ->C
Estado da Pilha de Atividades após o lançamento D atividade
A ->B ->C ->D (Aqui D lança como de costume)
Caso 2:
Suponha que você tem atividades A, B, C e D e sua atividade B tem “modo de lançamento = singleTask”. Agora você lança novamente a atividade B-
Estado da Pilha de Atividade antes do lançamento D
A -> B -> C -> D
Estado da Pilha de Atividade depois do lançamento B atividade
A -> B (Aqui a velha instância é chamada e os dados de intenção são encaminhados através da chamada de retorno emNewIntent())
Também, note que as atividades C e D são destruídas aqui.

singleInstance : O mesmo que,singleTask exceto que a instância sem atividades pode ser empurrada para a mesma tarefa das singleInstance‘s. Assim, a atividade com modo de lançamento está sempre em uma única tarefa de instância de atividade. Este é um modo muito especializado e só deve ser usado em aplicações que são implementadas inteiramente como uma única atividade.

Exemplo:
Caso 1:
Suponha que você tem atividades A, B e C e sua atividade D tem “modo de lançamento = singleInstance”. Agora você lança a atividade D –
Estado da Pilha de Atividades antes do lançamento D
A ->B ->C
Estado da Pilha de Atividades após o lançamento D atividade
Task1-A ->B ->C
Task2-D (aqui D estará em tarefa diferente)
Agora se você continuar isto e iniciar E e D então Stack parecerá como-
Task1-A ->B ->C ->E
Task2-D
Case 2:
Ponha que você tem atividades A, B, C em uma tarefa e a atividade D está em outra tarefa com “modo de lançamento = singleInstance”. Agora você lança novamente a atividade D-
Estado da Pilha de Atividade antes do lançamento D
Task1-A ->B ->C
Task2-D
Estado da Pilha de Atividade após o lançamento da atividade B
Task1-A ->B ->C
Task2-D (Aqui a velha instância é chamada e os dados de intenção são encaminhados através de retorno de chamada emNewIntent())

FLAG_ACTIVITY_NEW_TASK : O mesmo que o valorsingleTask no arquivo Manifesto (veja acima).

FLAG_ACTIVITY_SINGLE_TOP : O mesmo que o valorsingleTop no arquivo Manifesto (veja acima).

FLAG_ACTIVITY_CLEAR_TOP : Se a atividade sendo iniciada já está em execução na tarefa atual, então ao invés de lançar uma nova instância dessa atividade, todas as outras atividades em cima dela são destruídas e essa intenção é entregue à instância reiniciada da atividade (agora em cima), no entanto.onNewIntent() Não há nenhum valor correspondente no arquivo Manifesto que produz esse comportamento. Eu usei referência para este artigo estão aqui e aqui.

Por favor, assine o e-mail para receber todas as newsletters deste blog e se você acha que este post vai ajudá-lo a entender melhor, então não se esqueça de assinar, compartilhar e comentar abaixo. Ok, então eu vou vê-lo no meu próximo tutorial até lá aproveite sua vida e feliz codificação 🙂

0 0 voto
>Avaliação de artigos

Eu sou um desenvolvedor muito entusiasmado Android para construir aplicativos sólidos Android. Eu tenho um grande interesse em desenvolver para Android e publiquei aplicativos para a Google Play Store. Eu sempre estou aberto a aprender novas tecnologias. Para qualquer ajuda deixe-nos uma linha a qualquer momento em [email protected]