Respuestas:
¿Sale inmediatamente o completa la función desde la que fue llamado?
El método que llamó finish()
se ejecutará hasta su finalización. La finish()
operación ni siquiera comenzará hasta que regrese el control a Android.
Cada evento de ciclo de vida como onCreate
, onResume
, onPause
.... onDestroy
de una actividad es llamado siempre en un solo hilo - El "hilo principal".
En resumen, este hilo está respaldado por una cola en la que se publican todos los eventos de actividad. Este hilo puede ejecutar todos estos eventos en el orden de inserción.
Si está llamando finish()
en una de las devoluciones de llamada del ciclo de vida como onCreate()
... se agregará un mensaje de "finalización" a esta cola, pero el hilo no es libre de elegir y ejecutar la acción "finalizar" hasta que el método actualmente en ejecución regrese, es decir, el hilo se libera de tarea actual.
ondestroy()
es la última llamada que recibe antes de que se destruya su actividad.
Esto puede suceder porque la actividad está finalizando (alguien la llamó finish()
o porque el sistema está destruyendo temporalmente esta instancia de la actividad para ahorrar espacio. Puede distinguir entre estos dos escenarios con el isFinishing()
método.
Si hay dos actividades A y B. Y su flujo va de A> B; y B = A llamadas finish()
.
Luego,
El método desde el que llamó finish()
se ejecutará como lo mencionó Mark. Y el flujo de devoluciones de llamada será el siguiente:
onPause()
de activity A
onRestart()
> onStart()
> onResume()
De la actividad Bfinish()
desde activity A
; Sólo onStop()
de Activity A
será llamado aquí. Si bien, en este caso, en que llamamos finish()
a partir Activity A
; Así onStop()
y onDestroy()
ambos serán requeridos activity A
.