[Primera aplicación] Tengo una cierta pantalla de salpicaduras animadas (actividad) que se abre a través de transmisión y se puede cerrar por un botón en la actividad en sí misma o a través de otra transmisión. Sin embargo, la apertura y el cierre están funcionando bien. Sin embargo, siempre que la pantalla de inicio esté activa (en pantalla) y entregue la transmisión

Si abro mi aplicación (es decir, la actividad del iniciador), presiono el botón Atrás y luego entrego el receptor para abrir la pantalla de inicio, entonces no abre mi actividad principal cuando está cerrada. Esto significa que mi pantalla de presentación siempre se entrega en la parte superior de mi pila de aplicaciones. ¿Es este comportamiento normal? Quiero evitar esto, por lo que cualquier solución alternativa es bienvenida.

Código para lanzar Splash Pantalla:

private void showSplashScreen() {
    Intent m_intent = new Intent(this, SafSplashActivity.class);
    m_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    m_intent.putExtra("theme", theme);
    context.startActivity(m_intent);
}

Actualización 1: Si utilizo System.exit(0) en lugar de finish(0) en mi actividad de bienvenida, en lugar de llevar mi actividad principal al primer plano, mi actividad principal comienza desde cero (y finalmente se lleva al primer plano) ...

P.S. - Este es un problema serio para mi aplicación porque incluso después de hacer clic en el botón Cerrar en la pantalla de inicio Si los usuarios se encuentran en la actividad del lanzador, pueden sentirse tentados a hacer una "fuerza de fuerza" de la aplicación. Esto sería malo para la aplicación, ya que es altamente dependiente de las transmisiones activadas por el sistema.

0
Shaishav 4 feb. 2015 a las 22:29

2 respuestas

La mejor respuesta

A pesar de que es un viejo problema que le pregunté, terminé de arreglarlo agregando a mi intención de lanzamiento:

m_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

De acuerdo con los documentos:

Si se establece en un Intent pasado a Context.startActivity (), este indicador hará que una tarea recién iniciada se coloque encima de la tarea de actividad doméstica actual (si existe). Es decir, presionar hacia atrás desde la tarea siempre devolverá al usuario a casa, incluso si esa no fue la última actividad que vio.

Dado que, mi actividad de salpicaduras es una que se supone que se lanzará incluso cuando el teléfono está bloqueado, por lo que la bandera anterior se ajusta perfectamente. Un inconveniente es que la bandera solo funcionará en API 11+ (es decir, un total de 4 de mis usuarios no se beneficiará de él: D)

1
Shaishav 28 ago. 2016 a las 07:18

Resolví el problema configurando launchMode="singleInstance" para la actividad de presentación. Aunque, todavía no estoy seguro de si se suponía que existía el problema original. ¿Qué sucede si el modo de inicio de singleInstance no se puede usar en el caso de uso de otra persona? ¿Cuál sería entonces la solución?

0
Shaishav 5 feb. 2015 a las 21:49