Meu aplicativo mostra uma atividade de inscrição na primeira vez que o usuário o executa, se parece com:
- ActivitySplashScreen (bem-vindo ao jogo, inscreva-se em uma conta?)
- ActivitySplashScreenSignUp (ótimo, preencha estas informações)
- ActivityGameMain (tela principal do jogo)
portanto, as atividades se iniciam exatamente nessa ordem, quando o usuário clica em um botão em cada tela.
Quando o usuário passa da atividade nº 2 para a nº 3, é possível apagar os nºs 1 e 2 da pilha de histórico completamente? Eu gostaria que, se o usuário estivesse na posição # 3 e apertasse o botão Voltar, eles apenas fossem para a tela inicial, em vez de voltar para a tela inicial.
Eu acho que posso fazer isso com tarefas (por exemplo, iniciar uma nova tarefa no 3), mas queria ver se havia um método mais simples,
obrigado
Respostas:
Você pode conseguir isto, definindo o
android:noHistory
atributo para"true"
nos relevantes<activity>
entradas no seuAndroidManifest.xml
arquivo. Por exemplo:fonte
FLAG_ACTIVITY_NO_HISTORY
.android:noHistory="true"
Você pode usar o encaminhamento para remover a atividade anterior da pilha de atividades enquanto inicia a próxima. Há um exemplo disso no APIDemos , mas basicamente tudo o que você está fazendo é ligar
finish()
imediatamente após a chamadastartActivity()
.fonte
FLAG_ACTIVITY_CLEAR_TOP
não funcionará porque C ainda não está na pilha de trás.Sim, consulte Intent.FLAG_ACTIVITY_NO_HISTORY .
fonte
android:noHistory="true"
no manifesto.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
para definir este sinalizador.Provavelmente, essa não é a maneira ideal de fazê-lo. Se alguém tiver uma maneira melhor, esperarei implementá-la. Aqui está como eu realizei essa tarefa específica com o pré-version-11 sdk.
em cada aula que você deseja ir quando estiver na hora certa, faça o seguinte:
então o que precisa desencadear a cadeia de pops da pilha precisa chamar assim quando você deseja iniciá-lo:
Então as atividades não estão na pilha!
Lembre-se, pessoal, de que você pode iniciar uma atividade e, em seguida, começar a limpar por trás dela, a execução não segue um único thread (a interface do usuário).
fonte
Uma maneira que funciona antes da API 11 é iniciar
ActivityGameMain
primeiro e, em seguida, naonCreate
atividade iniciar suaActivitySplashScreen
atividade. AActivityGameMain
não aparecerá como você chama startActivity cedo demais para o respingo.Em seguida, você pode limpar a pilha ao iniciar
ActivityGameMain
, definindo esses sinalizadores no Intent:Você também deve adicionar isso ao ActivitySplashScreen:
Para que pressionar essa atividade não volte para o seu
ActivityGameMain
.Suponho que você também não queira que a tela inicial volte, para conseguir isso, sugiro configurá-la
noHistory
no seuAndroidManifest.xml
. Em seguida, coloque ogoBackPressed
código na suaActivitySplashScreenSignUp
classe.No entanto, eu encontrei algumas maneiras de quebrar isso. Inicie outro aplicativo a partir de uma notificação enquanto
ActivitySplashScreenSignUp
é mostrado e o histórico anterior não é redefinido.A única maneira real de contornar isso é na API 11:
fonte
Eu uso assim.
fonte
Sei que estou atrasado (faz dois anos que a pergunta foi feita), mas consegui isso interceptando o botão Voltar. Em vez de verificar atividades específicas, basta olhar para a contagem e, se for menor que 3, simplesmente envia o aplicativo para trás (pausando o aplicativo e retornando o usuário para o que estava sendo executado antes do lançamento). Verifico menos de três, porque só tenho uma tela de introdução. Além disso, verifico a contagem, pois meu aplicativo permite que o usuário navegue de volta à tela inicial pelo menu; portanto, isso permite que ele faça backup em outras telas normalmente, se houver outras atividades além da tela de introdução na pilha.
fonte
No manifesto, você pode adicionar:
Você também pode ligar
imediatamente após chamar startActivity (..)
fonte
Basta definir
noHistory="true"
no arquivo de manifesto . Faz com que a atividade seja removida do backstack.fonte
É uma loucura que ninguém tenha mencionado essa solução elegante. Essa deve ser a resposta aceita.
SplashActivity -> AuthActivity -> DashActivity
A chave aqui é usar
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
para o intermediárioActivity
. Depois que o link do meio é quebrado, oDashActivity
testamento será o primeiro e o último da pilha.android:noHistory="true"
é uma solução ruim, pois causa problemas ao confiar noActivity
retorno de chamada, por exemploonActivityResult
. Esta é a solução recomendada e deve ser aceita.fonte
É tarde demais, mas espero que ajude. A maioria das respostas não está apontando na direção certa. Existem duas bandeiras simples para isso.
Dos documentos do Android:
fonte
Basta chamar this.finish () antes de startActivity (intent) como este-
fonte
A remoção de uma atividade de um histórico é concluída Ao definir o sinalizador antes da atividade que você não deseja
A-> B-> C-> D
Suponha que A, B, C e D sejam 4 Atividades, se você deseja limpar B e C e defina o sinalizador
Na atividade A e B
Aqui está o bit de código
fonte
fonte
Tente o seguinte:
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)
é o nível 1 da API, verifique o link .
fonte
Intent.FLAG_ACTIVITY_NO_HISTORY
?