android - novedades - minecraft 1.13 mods
Diferencia entre finish() y System.exit(0) (4)
Estoy hablando de la programación en Android.
En los primeros días pensé que, finish()
cierra la actividad actual y vuelve a la anterior en la pila de actividades, y System.exit(0)
cierra toda la aplicación .
Pero estaba equivocado. Hice un pequeño experimento y comprendí que ambos terminarán solo la Actividad actual .
Las únicas diferencias que pude notar es que, en Android 2.3.3
- El ActivityResult se propaga nuevamente a
onActivityResult()
utilizandofinish()
. Mientras queonActivityResult()
no se llama paraSystem.exit(0)
.
Pero en Android 4.2.2, se llama a onActivityResult () para ambos! y la Intención era nula para exit (). (He probado solo en estos 2 dispositivos)
- Hay un lapso de tiempo cuando se usa exit () mientras que el
finish()
es más rápido (parece que hay más operaciones de fondo en exit ())
Asi que,
cual es la diferencia entre dos
¿En qué situaciones puedo usar exit ()?
Creo que hay algo más que me estoy perdiendo entre los dos métodos. Espero que alguien pueda explicarme más y corregirme.
Gracias
EDITAR A PETICIÓN:
Hacer una aplicación de Android con 2 actividades. Llama a la segunda actividad de la actividad del lanzador usando Intent. Ahora, dentro de la segunda actividad, al hacer clic en un botón, llame a System.exit(0);
. " La máquina virtual detiene la ejecución y el programa se cerrará " . ???? (según la documentation )
Veo la primera actividad allí. ¿Por qué? (Le invitamos a que demuestre que estoy equivocado / que tenía razón)
En realidad no hay diferencia si solo tienes una actividad. Sin embargo, si tiene varias actividades en la pila, entonces:
- finish () : finaliza la actividad desde la que se llama y verá la actividad anterior.
- System.exit (0) : reinicia la aplicación con una actividad menos en la pila. Entonces, si llamó a ActivityB desde ActivityA, y se
System.exit(0)
en ActivityB, entonces la aplicación seSystem.exit(0)
y se iniciará de inmediato con solo una actividad ActivityA
La respuesta de Sa Qada es correcta después de mi prueba.
El acabado cerrará esta actividad y volverá a prevalecer.
pero salir también cerrará la actividad actual y vaciará toda la actividad en congelación y volverá a comenzar la actividad anterior
En realidad no hay diferencia si solo tienes una actividad. Sin embargo, si tiene varias actividades en la pila, entonces:
finish (): finaliza la actividad desde la que se llama y verá la actividad anterior. System.exit (0): reinicia la aplicación con una actividad menos en la pila. Entonces, si llamó a ActivityB desde ActivityA, y se llama a System.exit (0) en ActivityB, entonces la aplicación se eliminará y se iniciará de inmediato con solo una actividad ActivityA
Según el desarrollador de Android -
finish()
Llame a esto cuando su actividad esté terminada y debe cerrarse. El ActivityResult se propaga nuevamente a quien lo lanzó a través de onActivityResult ().
System.exit(0)
La máquina virtual detiene la ejecución y el programa se cerrará.
Según la documentación, el programa saldrá.
Pero parece un error en la documentación. En el caso de un programa java, es correcto. Pero llegando a Android, verá la Actividad anterior de la pila.
Dado que la codificación de Android se realiza mediante la codificación java, la mayoría de la documentación es la misma que la de java.
De la documentación,
System.exit (0)
La máquina virtual detiene la ejecución y el programa se cerrará.
Para el aspecto de Android, tenemos que reemplazar la palabra ''programa'' con otra cosa. Puede ser actividad o contexto.