2011-02-17 17 views
6

En mi proyecto, necesito ver el cambio de foco de la ventana. Cerré los resultados de todas las etapas de una actividad. Cuando la pantalla está encendida, el resultado es el siguiente:¿Cuándo cambia el * Window focus * en Android?

02-17 13:50:03.898: DEBUG/InquiryInterface(3829): onCreate screen state : false 
02-17 13:50:03.898: DEBUG/InquiryInterface(3829): onStart screen state : false 
02-17 13:50:03.898: DEBUG/InquiryInterface(3829): onResume screen state : false 
02-17 13:50:08.998: DEBUG/InquiryInterface(3829): onPause screen state : true 
02-17 13:50:09.178: DEBUG/InquiryInterface(3829): onWindowFocusChanged : false 
02-17 13:50:09.228: DEBUG/InquiryInterface(3829): onStop screen state : false 
02-17 13:50:09.228: DEBUG/InquiryInterface(3829): onDestroy screen state : false 

onWindowFocusChanged es el método proporcionado por la actividad de clase. Y el valor que se muestra en la lista es el valor de entrada (boolean hasFocus) del método onWindowFocusChanged.

He utilizado el siguiente código para obtener el estado de enfoque de la ventana para cada estado del método, onCreate, onStart, etc.

@Override 
    public void onResume() { 
     super.onResume(); 
     Log.d(TAG, "onCreate screen state : " 
       +String.valueOf(this.hasWindowFocus())); 
} 

Pero en el documention Android, leo: el método onResume () es Se invoca cuando la actividad comenzará a interactuar con el usuario. En este punto, tu actividad está en la parte superior de la pila de actividades, con la entrada del usuario.

De esta manera, debería ser "Verdadero" para el foco de la ventana en onResume, pero no en onPause(). Alguien tiene una idea de por qué sucede esto?

Respuesta

9

Lo entiendo es lo contrario de lo que dices. se llama a onResume() justo antes de que su actividad obtenga el foco, y se llama a onPause justo antes de que pierda el foco. Podría haber jurado que lo leí de esta manera en alguna parte, pero parece que no puedo encontrar dónde lo vi en el Activity Lifecycle documentation

+0

Acabo de revisar todo ciclo de vida de la actividad con más registros, y tengo la misma conclusión que la tuya. Gracias, he aceptado tu respuesta. No lo sabía antes :) – Mathieu

+3

De [los documentos] (http://developer.android.com/reference/android/app/Activity.html#onWindowFocusChanged%28boolean%29): _ "Tenga en cuenta que esto proporciona información acerca de estado de enfoque global, que se gestiona independientemente de ciclos de vida de actividad. Como tal, aunque los cambios de foco generalmente tendrán alguna relación con los cambios del ciclo de vida (una actividad que se detiene generalmente no tendrá foco en la ventana), no debe confiar en ningún orden particular entre las devoluciones de llamada aquí y las de los otros métodos del ciclo de vida como onResume(). "_ –

0

En el momento en que se llama onResume(), su actividad ya tiene foco. Eso es lo que te dicen los documentos.

+0

Sí, estoy de acuerdo. Entonces, ¿debería ser "verdadero" para el estado de foco de ventana si estoy dentro de Reanudar()? – Mathieu

+4

Esto no es verdad. onResume se llama antes de que la ventana tenga foco. Si activa su actividad y luego pone su teléfono en modo de suspensión, cuando enciende el botón de encendido, se activará su actividad en Repetición y estará mirando la pantalla de bloqueo. Solo después de cerrar la pantalla de bloqueo, se llama a onWindowFocusChange. Buena explicación aquí: http://android-developers.blogspot.de/2011/11/making-android-games-that-play-nice.html – Tim

+0

@Tim - Entiendo tu punto. Sin embargo, es interesante que [los documentos para el ciclo de vida de la actividad] (http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle) digan: _ "Se llama cuando la actividad comenzará a interactuar con el usuario . En este punto, su actividad se encuentra en la parte superior de la pila de actividades, con la participación del usuario. "_ La definición de foco, hasta donde yo sé, es donde va la actividad del usuario. (Por supuesto, la documentación posterior contradice esto, pero esa fue la fuente de mi error.) –