Quero saber se o usuário retornaria à tela inicial se sair da atividade atual.
android
android-activity
lifecycle
virsir
fonte
fonte
Respostas:
ATUALIZAÇÃO (jul de 2015):
Desde getRunningTasks () se obsoleta, de API 21, é melhor seguir raukodraug resposta ou Ed Burnette um (eu preferiria segundo).
Há possibilidade de verificar as tarefas atuais e sua pilha usando o ActivityManager .
Portanto, para determinar se uma atividade é a última:
Use o seguinte código:
Observe que o código acima será válido apenas se você tiver uma única tarefa. Se houver a possibilidade de existir um número de tarefas para o seu aplicativo - você precisará verificar outros elementos taskList . Leia mais sobre tarefas Tarefas e Back Stack
fonte
isTaskRoot()
métodoVou postar o comentário do @ H9kDroid como a melhor resposta aqui para pessoas que têm uma pergunta semelhante.
Você pode usar isTaskRoot () para saber se a atividade é a raiz de uma tarefa.
Eu espero que isso ajude
fonte
if (isTaskRoot()) { // do something }
Espero que isso ajude os novos iniciantes. Com base nas respostas acima, que funcionam bem para mim, também estou compartilhando um trecho de código para que seja fácil de implementar.
solução: usei o
isTaskRoot()
que retornará true se a atividade atual for apenas atividade na sua pilha e outro que não seja também o caso em que, se tiver alguma atividade na pilha, vá para a última atividade na pilha em vez de abrir uma nova personalizada.Na sua atividade
fonte
existe uma solução mais fácil para isso, você pode usar isTaskRoot () em sua atividade
fonte
Embora possa haver uma maneira de conseguir isso (consulte outras respostas), sugiro que você não faça isso. Os aplicativos normais do Android não precisam saber se a tela inicial está prestes a ser exibida ou não.
Se você estiver tentando salvar dados, coloque o código para salvar dados no método onPause (). Se você está tentando dar ao usuário uma maneira de mudar de idéia sobre a existência do aplicativo, você pode interceptar a tecla para cima / baixo da tecla Voltar e do método onBackPressed () e apresentá-lo com um "Você tem certeza?" pronto.
fonte
Uma maneira de acompanhar isso é incluir um marcador quando você inicia uma nova atividade e verificar se o marcador existe.
Sempre que você iniciar uma nova atividade, insira o marcador:
E você pode então verificar assim:
fonte
O problema com a solução da sandrstar
ActivityManager
é: você precisa de uma permissão para executar as tarefas dessa maneira. Eu encontrei uma maneira melhor:A
Activity
parte inferior da pilha deve sempre obter essa categoria por padrão, enquanto outras atividades não devem obtê-la.Mas mesmo que isso falhe em alguns dispositivos, você pode configurá-lo ao iniciar o seu
Activity
:fonte
Criei uma classe base para todas as minhas atividades, estendendo o AppCompatActivity e que possui um contador estático:
Até agora, isso funcionou bem o suficiente; e independentemente da versão da API. É claro que exige que todas as atividades estendam essa classe base - o que elas fazem, no meu caso.
Editar: notei uma instância em que o contador cai para zero antes de o aplicativo sair completamente, ou seja, quando a orientação é alterada e apenas uma atividade é aberta. Quando a orientação muda, a atividade é fechada e outra é criada, então
onDestroyed
é chamada para a última atividade e, em seguida,onCreate
é chamada quando a mesma atividade é criada com a orientação alterada. Esse comportamento deve ser considerado; OrientationEventListener poderia ser usado.fonte
O Android implementa uma pilha de atividades. Sugiro que você leia aqui . Parece que tudo que você quer fazer, porém, é recuperar a atividade de vocalização:
getCallingActivity()
. Se a atividade atual é a primeira atividade em seu aplicativo e o aplicativo foi iniciado a partir da tela inicial, devo (presumo) retornarnull
.fonte
A única coisa que faltou aqui é o clique na "tecla Home", quando ativado, você não pode detectar isso em sua atividade; portanto, é melhor controlar a pilha de atividades programaticamente com o manuseio da tecla "Back key" e a mudança para a atividade necessária ou apenas executando as etapas necessárias.
Além disso, você não pode ter certeza de que o início de sua atividade da lista "Atividade recente" pode ser detectado com a predefinição de alguns dados extras na intenção de abrir a atividade, pois ela é reutilizada nesse caso.
fonte