¿Cómo funciona Activity.finish () en Android?


Respuestas:


123

¿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.


3
Entonces, ¿cómo terminar una actividad que es llamada por StartAvtivityforResults () sin completar?
Ayush Pateria

@CommonsWare ¿Cómo podemos asegurarnos de que onStop se llame siempre? En mi aplicación, OnStop y onDestroy no se llaman en algunos casos y, en esos casos, la actividad del niño tarda demasiado en terminar y parece que la aplicación se ha colgado ... Mientras que cuando se llama onStop, todo funciona normalmente. Estoy en Galaxy y con Android 2.3.6 ... mira mi pregunta en stackoverflow.com/questions/13928591/… ¡¡¡Ayuda por favor !!!
Amit

@CommonsWare Probé al señor muy cierto. + 1 para usted Pero quiero hacer una pregunta que escribí finish () como una primera declaración en mi función, luego está ejecutando toda la función y luego finish () se llama Cómo se administró esto.
Nikhil Agrawal

@NikhilAgrawal, puede hacer que su función regrese justo después de que se llame a finish ().
antonio081014

¿Fin () también llama a onPause () y onStop () antes de llamar a onDestroy ()?
sr09

20

Cada evento de ciclo de vida como onCreate, onResume, onPause.... onDestroyde 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.


13

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.


1

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:

  1. onPause() de activity A
  2. onRestart()> onStart()> onResume()De la actividad B
  3. Entonces, viene la verdadera diferencia. Si no llamó finish()desde activity A; Sólo onStop()de Activity Aserá 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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.