Desde el documento de Android aquí http://developer.android.com/reference/android/app/Activity.html , decía 'La actividad entra en primer plano' llamará onPause()
y 'La actividad ya no es visible' llamará onStop()
.
¿No es 'La actividad entra en primer plano' igual que 'La actividad ya no es visible'? ¿Me puede decir cuál es la diferencia entre ellos?
paused
actividad está completamente viva (mantiene toda la información del estado y de los miembros y permanece adjunta al administrador de ventanas). Unastopped
actividad también retiene toda la información del estado y de los miembros, pero ya no se adjunta a lawindow manager
.Respuestas:
No, si alguna actividad entra en primer plano, eso no significa necesariamente que la otra actividad sea completamente invisible. Considere el siguiente caso:
Aquí vemos ambas actividades al mismo tiempo. La primera actividad con los campos está oscurecida por otra actividad, y el usuario ya no puede interactuar con ella. Sin embargo, todavía es visible con todas las consecuencias resultantes.
Eso deja una pregunta sobre qué actividad se considera totalmente opaca y cubre toda la pantalla y cuál no. Esta decisión se basa en la ventana que contiene la actividad. Si la ventana tiene una bandera
windowIsFloating
owindowIsTranslucent
, entonces se considera que la actividad no hace que las cosas subyacentes sean invisibles, de lo contrario, sí lo hará y haráonStop()
que se llame. El código relevante se puede encontrar encom.android.server.am.ActivityRecord
:fuente
onPause()
yonStop()
. ¿Es 100%? Si solo se ve un píxel de la actividad anterior, ¿está quietoonPause()
?onPause()
no se llama en absoluto cuando se muestra un cuadro de diálogo.onPause()
solo se llama cuando presiono el botón de inicio . ¿Cómo es esto posible?Si aún puede ver alguna parte de él (
Activity
al ponerse en primer plano, o bien no ocupa toda la pantalla o es algo transparente),onPause()
se llamará. Si no puede ver ninguna parte,onStop()
se le llamará.Un cuadro de diálogo **, por ejemplo, puede no cubrir todo el anterior
Activity
, y este sería un momento paraonPause()
ser llamado.** No me estoy refiriendo a un Diálogo de Android aquí, sino a una idea conceptual de algo que aparece y solo oscurece parte de la pantalla del usuario. Esta nota se agregó para aclarar en base a un comentario de @GMsoF a continuación
fuente
Dialog
, como en la clase de Android. Sin embargo, a lo que me estaba refiriendo es a algo que en parte oculta el primeroActivity
para ilustrar la idea de que todas las novedadesActivity
no necesitan cubrir completamente el anterior.Estar en primer plano significa que la actividad tiene un enfoque de entrada. Por ejemplo, una actividad puede ser visible pero parcialmente oscurecida por un diálogo que tiene el foco. En ese caso,
onPause()
se llamará, pero noonStop()
. Cuando el diálogo desaparece,onResume()
se llamará al método de la actividad (pero noonStart()
).fuente
onPause()
se llama cuando el dispositivo se va a dormir o cuando aparece un diálogo" . Sin embargo, como este hilo deja en claro, un diálogo no necesariamente significa que una actividad está en pausa (aunque sería para, por ejemplo, una actividad que se muestra como un diálogo ).Prácticamente , uno debe considerar la diferencia entre "onPause ()" y "onPause () + onStop ()".
Cada vez que ocurre una nueva actividad y ocupa un espacio parcial de la pantalla. Por lo tanto, su actividad de ejecución anterior todavía es visible hasta cierto punto. En este caso, la actividad que se ejecutaba anteriormente no se empuja a Back Stack. Entonces, aquí solo se llama al método onPause () .
Por otro lado, si se produce alguna Actividad nueva y ocupa la pantalla completa para que desaparezca su actividad anterior. En este caso, su actividad anterior se mueve a Back Stack. Aquí se llama a onPause () + onStop ().
A los resúmenes
onPause () - La pantalla está parcialmente cubierta por otra actividad nueva. La actividad no se mueve a Back Stack.
onPause () + onStop () - La pantalla está completamente cubierta por otra actividad nueva. La actividad se mueve a Back Stack.
Conozca más sobre Back Stack .
fuente
En palabras concisas:
onStop()
del método del ciclo de vida de la actividad anterior se invoca cuando se muestra otra actividad. Cuando tiene Diálogo en la parte superior de la actividad,onPause()
se invoca.Nota : Las actividades son aquellos componentes que llenan toda su pantalla.
Nota : Los diálogos no son actividad, ya que no llenan completamente la pantalla.
fuente
Enfrenté muchos problemas con los métodos onPause y onStop y, por lo tanto, eliminaré tres escenarios que encontré:
1. Cuando hace clic en el botón de la aplicación reciente, no se llama a ningún método del ciclo de vida, pero se llama a onWindowFocusChanged (boolean hasFocus) con el valor hasFocus Pasado como falso. En la versión de Android anterior a la 5, el método onPause solía ser llamado, al presionar el botón de la aplicación reciente.
2. Cuando aparece una actividad emergente como sobre su actividad, como lo menciona Malcolm , se llama al botón onPause. Si se llama a una nueva actividad que ocupa toda la pantalla, se llama a onStop en la actividad anterior. El diálogo de permiso de Android también hace que su actividad llame a onPause.
3)Si la pantalla agota su actividad, se llama a onPause. Después de algún tiempo, si no abre la pantalla, se llamará a onStop.
También una cosa importante mencionada por el ateiob que completa la respuesta
Espero eso ayude.
fuente
siempre que comience una nueva ACTIVIDAD, la actividad anterior se
onPause
llamará definitivamente en cualquier circunstancia.en realidad habrá dos circunstancias:
1- una parte de la actividad anterior es visible o la nueva actividad es transparente: solo
onPause
se llamará.2- la actividad anterior está completamente cubierta por una nueva actividad: ambas
onPause
yonStop
se llamarán---- Es bueno decir algunas notas:
NOTA 1: si se inicia un diálogo sobre una actividad NINGUNA
onPause
oonStop
se llamará.NOTA 2: si se trata de una actividad cuyo tema se establece en un cuadro de diálogo, el comportamiento será como una actividad normal.
NOTA 3: al parecer, un diálogo del sistema como el diálogo de permiso, ya que causará malvavisco
onPause
.fuente
Sí, trato de entender y puedo explicar esto a continuación:
Hay 2 actividades: Actividad A y Actividad B
Aquí está la actividad B. Sigue mi comentario en código
Espero que esto sea claro
fuente