que - limpiar toda la pila de actividades android studio
¿Cómo prevenir el reinicio de la aplicación cuando se usa el lanzador después de la tienda? (1)
Esto es más como una solución a su problema, pero parece que no puede haber una solución real.
Lo primero que pensé fue que, dado que la configuración completa demorará un poco, ¿por qué no guarda un marcador (''firstLaunch'') en Preferencias, publica una notificación (¿se retrasa?) Y finaliza la aplicación, de modo que el usuario tiene que abrirlo de nuevo tocando en el icono del iniciador. Solo entonces comienza la configuración real, por lo que no perderá información debido al problema del instalador frente al iniciador.
Pero el problema parece haber existido por algún tiempo y las siguientes publicaciones SO pueden ayudar:
Relanzamiento del botón Actividad en Inicio, pero ... solo la primera vez
¡Espero que esto ayude!
Mi aplicación de Android se reinicia cuando uso el iniciador para iniciarlo después de haber utilizado la tienda de aplicaciones para iniciarlo (y viceversa). hay alguna forma de prevenir esto?
Al reiniciar quiero decir que la pila de actividades está perdida. Esto es importante ya que nuestros usuarios están configurando y volviendo a una actividad en la aplicación de forma intermitente en el transcurso de una hora más o menos. Después de la primera instalación, es probable que hayan instalado y abierto la aplicación desde la tienda de aplicaciones, se hayan configurado y luego fundado la aplicación. Más tarde, es probable que abran la aplicación desde el iniciador y pierdan todo su estado.
El problema se complica aún más cuando comenzamos un servicio en primer plano junto con la actividad de configuración. Al hacer clic en la notificación de servicios, el usuario debe regresar a la actividad de configuración pero, como con el iniciador, si el usuario abrió originalmente la aplicación desde la tienda Play, ¡nuevamente pierde todo su estado!
Reproduciendo el problema
He hecho una aplicación de muestra aquí:
https://github.com/samskiter/LaunchTest
Nota: utiliza el Id. Del paquete de la aplicación meteorológica BBC para permitirle abrir rápidamente desde la tienda de aplicaciones (el botón "Abrir" se mostrará en la aplicación meteorológica BBC si esta aplicación está instalada).
Los pasos son los siguientes:
- Desinstala la aplicación meteorológica BBC si la tienes
- Instala la aplicación LaunchTest
- Cierre la aplicación LaunchTest de recientes
- Abra la aplicación LaunchTest desde la página de la aplicación del clima de BBC en Play Store
- Haga clic en el botón para navegar a la segunda actividad
- Antecedentes de la aplicación (pulsar Inicio)
- Abra la aplicación LaunchTest desde el iniciador de aplicaciones
- ¡El estado está perdido! has vuelto a la actividad Primera (raíz)
Lo que he intentado
El uso del modo de inicio singleTask
no ha ayudado, hace que la aplicación singleTask
incluso si usa el iniciador todo el tiempo.
He intentado siempre con alwaysRetainTaskState
: realmente no espero que esto funcione, ya que esto solo afecta las cosas en una espera de 30 minutos.
Lo que creo que está sucediendo
No hay ningún mecanismo en el administrador de actividades / sistema de intención para abrir una aplicación en ejecución en su estado actual. En cambio, creo que se toma en cuenta el UID de la aplicación de lanzamiento. Si es diferente, se Intent.FLAG_ACTIVITY_NEW_TASK
indicador Intent.FLAG_ACTIVITY_NEW_TASK
, por lo que se crea una nueva tarea y se Intent.FLAG_ACTIVITY_NEW_TASK
el encantador estado de todos mis usuarios.
Inspección de Google Maps
Google maps tiene un modelo de interacción muy similar a nuestra aplicación: una interfaz de usuario de configuración, seguida de un proceso continuo que el usuario está llevando a cabo durante un largo período de tiempo (navegación) con un servicio emparejado en primer plano (el servicio de navegación que puede ver en barra de notificación). PERO GMaps no sufre este problema. Creo que esto se debe a que usa solo una actividad única para toda su interfaz y usa singleTask
. Así que ahora, cuando tocas el iniciador después de iniciarlo originalmente en Play Store, la tarea puede reutilizarse.
En mi opinión, esto expone un agujero en el sistema de gestión de intención / actividad de Android. El objetivo del ciclo de vida savedInstanceState
/ activity es evitar la caída del estado, pero aquí tenemos una forma de volcar todo. Mi mejor solución actual es detectar el reinicio de la aplicación por el hecho de que el servicio se está ejecutando e intentar que el usuario regrese a donde estaba, lo cual es más que un poco complicado.
Si alguien sabe cómo puedo evitar que mi estado caiga al suelo cuando vuelva a abrir desde el iniciador de aplicaciones después de abrirlo en la tienda, realmente lo agradecería.