Quiero saber si el usuario volverá a la pantalla de inicio si sale de la actividad actual.
android
android-activity
lifecycle
virsir
fuente
fuente
Respuestas:
ACTUALIZACIÓN (julio de 2015):
Desde getRunningTasks () quedar obsoleta, API de 21 que es mejor seguir raukodraug respuesta o Ed Burnette uno (yo preferiría segundo).
Existe la posibilidad de verificar las tareas actuales y su pila usando ActivityManager .
Entonces, para determinar si una actividad es la última:
Utilice el siguiente código:
Tenga en cuenta que el código anterior será válido solo si tiene una sola tarea. Si existe la posibilidad de que exista una cantidad de tareas para su aplicación, deberá verificar otros elementos de taskList . Leer más sobre tareas Tasks y Back Stack
fuente
isTaskRoot()
método.Voy a publicar el comentario de @ H9kDroid como la mejor respuesta aquí para las personas que tienen una pregunta similar.
Puede utilizar isTaskRoot () para saber si la actividad es la raíz de una tarea.
espero que esto ayude
fuente
if (isTaskRoot()) { // do something }
Espero que esto ayude a los nuevos principiantes. Basado en las respuestas anteriores que me funcionan bien, también estoy compartiendo un fragmento de código para que sea fácil de implementar.
solución: utilicé
isTaskRoot()
que devuelve verdadero si la actividad actual es solo actividad en su pila y, aparte de que también manejo el caso en el que si tengo alguna actividad en la pila, vaya a la última actividad en la pila en lugar de abrir una nueva personalizada.En tu actividad
fuente
hay una solución más fácil para esto, puede usar isTaskRoot () en su actividad
fuente
Si bien puede haber una manera de lograr esto (vea otras respuestas), le sugiero que no lo haga. Las aplicaciones normales de Android no deberían necesitar saber si la pantalla de inicio está a punto de mostrarse o no.
Si está intentando guardar datos, coloque el código de guardado de datos en su método onPause (). Si está tratando de darle al usuario una forma de cambiar de opinión acerca de la existencia de la aplicación, puede interceptar la tecla arriba / abajo para la tecla Atrás y el método onBackPressed () y presentarle un "¿Está seguro?" rápido.
fuente
Una forma de realizar un seguimiento de esto es incluir un marcador cuando inicie una nueva actividad y comprobar si el marcador existe.
Siempre que inicie una nueva actividad, inserte el marcador:
Y luego puede verificarlo así:
fuente
El problema con el uso de la solución de sandrstar
ActivityManager
es: necesita un permiso para obtener las tareas de esta manera. Encontré una mejor manera:El
Activity
en la parte inferior de la pila siempre debería obtener esta categoría de forma predeterminada, mientras que otras actividades no deberían obtenerla.Pero incluso si esto falla en algunos dispositivos, puede configurarlo mientras inicia su
Activity
:fuente
Creé una clase base para todas mis actividades, extendiendo AppCompatActivity y que tiene un contador estático:
Esto ha funcionado bastante bien, hasta ahora; e independientemente de la versión de API. Por supuesto, requiere que todas las actividades amplíen esta clase base, lo que hacen, en mi caso.
Editar: He notado una instancia en la que el contador baja a cero antes de que la aplicación salga por completo, que es cuando se cambia la orientación y solo una actividad está abierta. Cuando cambia la orientación, la actividad se cierra y se crea otra, por lo que
onDestroyed
se llama para la última actividad, y luegoonCreate
se llama cuando se crea la misma actividad con la orientación cambiada. Este comportamiento debe tenerse en cuenta; Posiblemente, se podría utilizar OrientationEventListener .fuente
Android implementa una pila de actividades, le sugiero que lea sobre esto aquí . Parece que todo lo que quiere hacer sin embargo es recuperar la actividad de llamada:
getCallingActivity()
. Si la actividad actual es la primera actividad en su aplicación y la aplicación se inició desde la pantalla de inicio, debería (supongo) regresarnull
.fuente
Lo único que se perdió aquí, es el clic de la "tecla Inicio", cuando se activa, no puede detectar esto en su actividad, por lo que sería mejor controlar la pila de actividades mediante programación manejando la tecla "Atrás" presionando y moviéndose a la actividad requerida o simplemente haciendo los pasos necesarios.
Además, no puede estar seguro de que el inicio de su actividad desde la lista "Actividad reciente" se puede detectar con la preconfiguración de algunos datos adicionales en la intención de la actividad de apertura, ya que se reutiliza en ese caso.
fuente