Análise aprofundada avançada avançada do Android dos quatro modos de inicialização

Análise aprofundada avançada avançada do Android dos quatro modos de inicialização

Análise aprofundada dos quatro modos de inicialização

O modo de inicialização da atividade também é um ponto difícil, porque os vários modos de inicialização e sinalizadores são muito fáceis de confundir, mas a atividade é o primeiro dos quatro componentes, é realmente muito importante, a fim de atender às necessidades do projeto, você deve use o modo de inicialização de atividade.

1. Activity 的 LaunchMode

1.1 Modo de inicialização

O motivo pelo qual Activity usa o modo de inicialização é que a criação de Activity está na pilha de tarefas. Quando iniciamos a mesma Activity, o sistema cria várias instâncias de Activity e as coloca na pilha de tarefas. Quando pressionamos a tecla Voltar, o pilha de tarefas As instâncias sairão da pilha uma a uma. Acho que a pilha não é desconhecida, com as características: primeiro a entrar, primeiro a sair. Se não permitirmos que o sistema crie a mesma Activity repetidamente, usaremos o modo de inicialização da Activity para defini-la. O modo de inicialização da atividade é dividido em quatro padrões, singleTop, singleTask e singleInstance, o artigo anterior também tem introduções relacionadas, e vou mencioná-los brevemente abaixo.

(1) Modo padrão padrão:

Este é o modo de inicialização padrão do sistema. Cada vez que você inicia uma atividade, uma nova instância é criada, independentemente de a instância existir. Se A iniciar B, as atividades de B entrarão na pilha de tarefas de A.

(2) Modo de multiplexação superior da pilha SingleTop:

Neste modo de inicialização, a nova atividade já está no topo da pilha. Se você iniciar a atividade novamente, a atividade não será recriada. Ao mesmo tempo, o método onNewIntent do sistema é chamado de volta.Por meio dos parâmetros deste método, podemos recuperar as informações da solicitação atual. É claro que os métodos onCreate, onStart e onResume da Activity não serão chamados novamente. Se a atividade não estiver no topo da pilha, a atividade será recriada.

(3) Modo de multiplexação de pilha SingleTask:

Este é um modo singleton, neste modo, enquanto a instância existir na pilha, a instância não será recriada. Por exemplo, se quisermos criar uma instância A, o sistema determinará primeiro se a mesma instância A existe na pilha de tarefas. Se a instância existir na pilha de tarefas, o sistema chamará A para o topo da pilha e chamará seu método onNewIntent. Ao mesmo tempo, as instâncias de Activity acima de A serão removidas da pilha até que A esteja no topo da pilha ; se a instância não existir, o sistema irá Inovação criar uma nova instância A e colocá-la no topo da pilha.

(3) Modo de instância única SingleInstance:

Normalmente chamo esse tipo de Activity de uma versão aprimorada do modo singleTask.Além de ter as características do modo singleTask, a instância Activity iniciada com singleInstance existe em uma pilha de tarefas separada e as solicitações subsequentes não criarão uma nova instância.

1.2 Pilha de tarefas

O que é uma pilha de tarefas? Como cada atividade é alocada para cada pilha de tarefas? As situações a seguir estão todas no modo singleTask.

definição:

Falando em um parâmetro, TaskAffinity, se traduz na relevância da tarefa. Este parâmetro identifica o nome da pilha de tarefas exigida por uma atividade. Por padrão, o nome da pilha de tarefas exigida pela atividade é o nome do pacote do aplicativo. A pilha de tarefas é dividida em uma pilha de tarefas em primeiro plano e uma pilha de tarefas em segundo plano. A atividade na pilha de tarefas em segundo plano está em um estado suspenso e o usuário pode alternar a pilha de tarefas em segundo plano para o primeiro plano. - Pilha de tarefas

1.3 Duas maneiras de definir o modo de inicialização

A primeira forma: defina o modo de inicialização por meio do arquivo de configuração do AndroidMenifest.


 1<activity
 2      android:name=".MonitoringActivitys.MonitorActivity"
 3       android:label="@string/title_activity_monitor"
 4       android:theme="@style/AppTheme.NoActionBar"
 5       android:launchMode="singleTask">
 6       <intent-filter>
 7           <action android:name="android.intent.action.MAIN" />
 8           <category android:name="android.intent.category.LAUNCHER" />
 9       </intent-filter>
10 </activity>

A segunda maneira: defina o modo de inicialização definindo o sinalizador no Intent.

1Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
2intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3startActivity(intent);

A diferença:

① A segunda prioridade é maior do que a primeira

② O primeiro tipo não pode definir o sinalizador FLAG_ACTIVITY_CLEAR_TOP para a Atividade, e o segundo tipo não pode especificar o modo singleInstance para a Atividade.

Acho que você gosta

Origin blog.51cto.com/15064450/2602811
Recomendado
Clasificación