Android – ¿cómo startActivity o startActivityForResult afectará el flujo lógico de la actividad actual?
Tengo esta pregunta cuando estoy estudiando un proyecto de código abierto de Android.
Tengo una actividad A1 que llama a otra actividad A2 en su método "onCreate". Sin embargo, hay instrucciones de código antes y después del método "startActivity / startActivityForResult". No conozco la secuencia de ejecución en A1 después del método "startActivity / startActivityForResult".
- Eliminar la antigua instancia de actividad al iniciar una nueva actividad
- Android Fragment creó dos veces el cambio de orientación
- ¿Cuál es la manera correcta de insertar una actividad en otro proyecto?
- ¿Cómo puedo mostrar un diálogo Progress entre dos actividades?
- ¿Cómo exportar una actividad para que otras aplicaciones puedan llamarla?
El marco de código para A1 se muestra a continuación:
public void onCreate(Bundle bundle) { <code statements before> this.startActivityForResult(.....); // Start A2 here. <code statements after> } public void onResume() { <code statements> } protected void onActivityResult(int requestCode, int resultCode, Intent data) { <code statements> } .....
Me pregunto si A1 terminaría primero su ciclo de ejecución (es decir, "onCreate" -> "onStart" -> "onResume" -> "onPause" -> "onStop") antes de llamar a A2, o simplemente terminar "onCreate" antes Llamando A2, o tiene otra lógica de ejecución?
Por otra parte, cuando A2 se devuelve (finishes) y "onActivityResult" en A1 se llama, entonces A1 ejecuta "onRestart" -> "onStart" -> "onResume" después de ejecutar el método "onActivityResult"?
Debido a que A1 y A2 tienen su propia interfaz de usuario, creo que las 2 actividades no pueden ejecutarse simultáneamente con dos subprocesos diferentes. ¿Alguien sabe la secuencia de ejecución exacta en este caso?
Gracias de antemano por cualquier sugerencia.
- Determinación del límite de tamaño de textura máximo / mínimo en Android OpenGLES
- Android: ¿Cómo puedo detectar si el botón Volver saldrá de la aplicación (es decir, ésta es la última actividad que queda en la pila)?
- ¿Por qué TabActivity está obsoleta (razón)?
- Actualizar actividad en Android
- Las mejores prácticas para llamar a finish () en una actividad en android?
- Android - ¿Cómo crear varias instancias de una actividad?
- ¿Cuáles son las diferencias entre extender la actividad y extender ListActivity?
- Android: inicia varias actividades
No se ejecutarán en diferentes subprocesos, ambos estarán en el subproceso principal de la interfaz de usuario. No puede garantizar cuándo / si onResume () y onPause () serán llamados como se describe en los documentos del ciclo de vida de Android aquí .
Si está iniciando otra actividad en el onCreate () de una actividad, debería esperar que la interfaz de usuario de A1 no se cargue (la primera vez). Debe esperar verlo cuando A2 devuelve un resultado.
Aparte de eso, yo sugeriría sólo probarlo y ver por ti mismo.
He simulado esta situación utilizando 2 muy simples actividades de Android y obtuvo los resultados a continuación.
Los siguientes son lo que sucedería cuando Android ejecuta "startActivity" / "startActivityForResult" dentro de un método de una actividad A1 para iniciar otra actividad A2,
- Reconocería que ahora existe la intención de despedir otra actividad A2,
- Se ejecutaría al final del método actual (no saltaría directamente a la actividad A2 intencionada),
- Entonces llamaría el método "onPause" de la actividad A1 (para permitirnos guardar el estado actual) y luego dejar la actividad actual,
- Ahora iniciaría la actividad A2 y llamaría a su secuencia de método "onCreate" -> "onStart" -> "onResume"
- El método "onStop" de la actividad de llamada inicial A1 PUEDE ser llamado aquí si la actividad llamada A2 ha cubierto toda la pantalla,
- El método "onDestroy" de la actividad de llamada inicial A1 PUEDE llamarse aquí si la actividad llamada A2 es una actividad "singleTask" y A1 está encima de A2 en la pila (todas las actividades encima de una actividad "singleTask" serían destruidas Cuando la actividad "singleTask" se lleva al frente).
Lo escribo aquí esperando que pueda ser útil para otros.