2011-01-25 15 views
5

¿Hay alguna forma de saber si una actividad se reanudará (es decir, se llama a OnResume) desde la pantalla de inicio/iniciador?¿Hay alguna forma de distinguir entre una actividad de Android onResume desde la pantalla de inicio?

Por ejemplo, si tengo una aplicación con dos actividades, A y B.

Escenario 1: Algunos acción del usuario sobre la Actividad Una invocará la actividad B, con lo que en el primer plano - Un movimiento Actividad en el fondo. A medida que la actividad A se mueve a un segundo plano, pasa por OnPause() y onStop(). El usuario (ahora en la Actividad B) finaliza la Actividad o pulsa el botón "Atrás", llevando la Actividad A de regreso al primer plano, causando una secuencia onRestart(), onStart(), onResume().

Escenario 2: Si el usuario pulsa el botón "Inicio", mientras que la actividad A se encuentra en el primer plano y luego re-invoca la aplicación desde el lanzador, que pasa por el mismo ciclo de vida como en el Escenario 1. es decir, El usuario pulsa el botón "inicio". La actividad pasa por Pausa() y OnStop(). El usuario vuelve a iniciar la aplicación, haciendo que la Actividad A regrese al primer plano, nuevamente pasando por la misma secuencia onRestart(), onStart(), onResume() como en el Escenario 1.

Por lo que puedo decir, el La actividad no tiene forma de saber cómo se reanudó, simplemente sabe que se la está devolviendo a la vista. De hecho, tengo la sensación de que realmente no existe el concepto de una "Aplicación" en Android, en el sentido de algo que tiene un único punto de entrada y salida.

+1

¿Por qué te preocupas por esto? – Macarse

+0

Ah. En realidad, estoy tratando de rastrear el número de lanzamientos de aplicaciones, pero hasta ahora no he encontrado una manera de distinguir entre los diferentes escenarios onRestart(). –

+0

Tenga en cuenta que hay otros casos en los que se reanudará una actividad, además del uso del botón de inicio. ¿Es un nuevo lanzamiento de la aplicación cuando el usuario recibe una llamada telefónica, el sistema mata su aplicación y luego la reanuda? Creo que será mejor hacer un seguimiento de las interacciones en su aplicación, en lugar del "lanzamiento", como quiera que esté definido. – sargas

Respuesta

2

en el Escenario 2, su actividad recibirá una llamada onNewIntent, con el intento de iniciador pasado.

+0

Según los documentos, onNewIntent solo se llama para ciertos modos de inicio: "singleTask" y "singleTop".Solo he logrado que funcione para "singleTask", sin embargo, los documentos no recomiendan ese modo de lanzamiento. –

+0

Este enfoque parece funcionar bien para mí. Tengo que marcar la actividad de "punto de entrada" como "singleTask", tho '. ¡Gracias! –

2

Puede capturar el botón Atrás presionar sobre la Actividad B y pasar un valor extra a la Actividad A. Si hay un valor extra, la actividad se reanudó de presionar nuevamente en la Actividad B, si no hay un valor adicional, entonces la Actividad fue reanudado de estar oculto.

+0

Tengo la sensación de que tendré que manejar ambos casos (la actividad B regresa con un resultado * y * "El usuario presiona el botón Atrás en la actividad B). –

1

¿Podría la actividad A utilizar startActivityForResult() para iniciar la actividad B y usar onActivityResult() para detectar que la actividad B ha finalizado?

+0

Supongo que el resultado de la actividad() ocurrirá después de que todas las otras devoluciones de llamada hayan finalizado. Comenté anteriormente, en realidad estoy interesado en contar lanzamientos de aplicaciones y es por eso que me he enganchado a onStart() y onResume(). He visto otras respuestas que sugieren onCreate() pero que no se activan al iniciar desde el pantalla "inicio". Podría disminuir el conteo si algo vuelve desde el resultado de actividad() pero parece kludgy - ¿quizás inevitable? –

Cuestiones relacionadas