2012-04-25 11 views
12

Tengo una aplicación con dos actividades: "A" y "B".onDestroy() mientras "esperaba" onActivityResult()

"A" usa startActivityForResult() para generar "B", es decir, espera "B". Ahora, supongamos que "B" está en primer plano. ¿Puede el sistema Android destruir la actividad "A" sin destruir también "B"? (En caso afirmativo, cuando termina "B", por ejemplo, después de la entrada del usuario, el sistema Android debe recrear la actividad "A" y ponerla de nuevo en primer plano, y debo recordar y restablecer "A" a su estado de IU anterior.)

Tenga en cuenta que no estoy hablando del proceso kill (que es un caso diferente: si un proceso se cancela, todas las actividades se eliminan y onDestroy() no se llama o no se garantiza su llamada). La pregunta es simplemente si onDestroy() es posible mientras se espera el resultado de una subactividad.

Respuesta

12

Si Actividad A muere en el momento en B termina, se le garantiza que

  1. se pueden volver a crear un .
  2. A entregan el resultado.

En otras palabras, A se volverá a crear la próxima vez que el usuario lo visite/necesite, y en ese momento se entregarán los resultados pendientes (de B a A).

También tenga en cuenta que esta es la razón por la que los resultados se deben devolver a través de una única devolución de llamada de actividad con un código de solicitud entero, en lugar de un objeto de devolución de llamada arbitrario.

+0

Gracias, eso es exactamente lo que pensé yo también, _provided_ y puede ocurrir un onDestroy. Entonces dices que le puede pasar a "A". En este caso, sin embargo, "A" se reiniciará, es decir, obtengo un onCreate() también (y luego, como dicen los documentos, obtengo el resultado antes onResume()), así que necesito restaurar el estado anterior de UI de "A" ", ¿derecho? Quiero decir, "B" se inicia en un submenú particular de "A", por lo que el usuario espera que el estado de la interfaz de usuario de "A" sea el mismo cuando "B" termina como cuando se inició "B". (Es decir, "A" está en el mismo submenú que cuando se inició "B"). En caso afirmativo, necesito persistir en el estado de UI de "A" _así bien_ antes de que se genere "B". –

+0

Corrígeme si estoy malinterpretando tu pregunta, pero parece que estás haciendo una pregunta más general sobre el ciclo de vida de la actividad que no tiene nada que ver con 'startActivityForResult'. Se le garantiza que el resultado se pasará de B a A (ya sea que A se destruya o no), pero esto no significa que se conserve el estado de la Actividad. Si se ha llamado a 'onDestroy', entonces es posible que desee restaurar su estado cuando se vuelva a crear en' onRestoreInstanceState' (o 'onResume'), como en el caso de cualquier otra actividad que se encuentre. –

+0

Espero que estos dos puntos lo hagan más claro: 1. Tiene que ver con startActivityForResult, porque no podría estar seguro si establece una restricción adicional, es decir, mientras _in general_ "A" puede destruirse, quizás no sea así. t si está esperando un resultado de "B". (Es decir, en tal caso, lo "peor" que puede obtener es un onStop()). Pero, según su respuesta, la destrucción de "B" también puede ocurrir en este caso. (Por supuesto, en el caso de actividades en diferentes procesos, es obvio que la destrucción independiente es posible, pero en mi caso están en la misma aplicación/proceso). –

Cuestiones relacionadas