Estou tendo várias atividades no meu aplicativo. e o fluxo é muito complicado. Quando clico no aplicativo Logout, navega para a tela de login e a partir daí o usuário pode sair pelo botão Cancelar (chamando system.exit(0)
)
Quando eu saio ou o botão Voltar, o sistema chama uma atividade da pilha :( como posso limpar todas as atividades da pilha quando chego à tela de Login? A chamada finish()
não é prática, pois há muitas atividades e algumas atividades não devem ser fechadas quando eles estão ativos, como atividade de chamada de câmera nativa.
validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);
android
android-activity
stack
Jay Mayu
fonte
fonte
Respostas:
A maioria de vocês está errada. Se você deseja fechar a pilha de atividades existente, independentemente do que está lá e criar uma nova raiz, o conjunto correto de sinalizadores é o seguinte:
Do documento :
fonte
IntentCompat.makeRestartActivityTask
na biblioteca de suporte.Quando você liga
startActivity
para a última atividade, você sempre pode usarcomo uma bandeira nessa intenção.
Leia mais sobre a bandeira aqui .
fonte
Aqui está um método auxiliar simples para iniciar uma nova atividade como a nova atividade principal que funciona desde o nível 4 da API até a versão atual 17:
chame assim da sua atividade atual:
fonte
Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
outra coisaintent.addFlags(0x8000);
nunca vai acrescentouApague a Atividade Backstate pelo código abaixo:
Feito
fonte
No meu caso, o LoginActivity também foi fechado. Como um resultado,
não ajudou.
No entanto, a configuração
me ajudou.
fonte
fonte
this.finish()
esetFlags()
também para limpar a atividade atual?Observei que você pediu uma solução que não depende
finish()
, mas me pergunto se isso pode ajudar.Rastreei se um sinalizador de saída é gerado com uma variável de classe estática, que sobrevive a vida útil do aplicativo inteiro. Em cada atividade relevante
onResume()
, useA classe ExitHelper
Digamos que em mainActivity, um usuário pressione um botão para sair - você pode definir
ExitHelper.isExitFlagRaised = true;
e depoisfinish()
. Depois disso, outras atividades relevantes retomadas automaticamente também serão concluídas.fonte
Esta decisão funciona bem:
Mas novas atividades são lançadas por muito tempo e você vê a tela branca em algum momento. Se isso for crítico, use esta solução alternativa:
Como usá-lo:
Desvantagem: todas as atividades que devem ser fechadas na pilha devem estender BaseActivity
fonte
Para Xamarin Developers, você pode usar:
fonte
Usando o Kotlin:
Você pode definir o sinalizador diretamente usando o método setter. No Kotlin
or
é o substituto para o Java bit a bit ou|
.Se você planeja usá-lo regularmente, crie uma função de extensão Intent
Você pode chamar diretamente essa função antes de iniciar a intenção
fonte