2012-07-30 17 views
14

Parece que si una actividad está en primer plano mientras la pantalla del teléfono está bloqueada, los eventos de difusión y/o wakelocks provocarán que se llame a la actividad onResume, ya sean intencionados para su aplicación o no. Esto sucede incluso si no interactúa con el teléfono de ninguna manera. No lo desbloquee, no lo toque, no haga nada, y se repetirá su onResume una y otra vez sin una Pausa correspondiente.onResume se repite una y otra vez mientras la pantalla del teléfono está bloqueada

Notamos esto porque registramos un evento de seguimiento en Reanudar, y notamos que algunos dispositivos recibían TONELADA de estos en los eventos de Reanudar. Pudimos reproducir y notamos que sucedía cada vez que una aplicación parecía tener una intención (como SugarSync, Google Voice o el oyente de ubicación pasiva en nuestra propia aplicación).

Notamos esto en el Galaxy Nexus y el Galaxy S3 con ICS. Es interesante notar que no pudimos reproducir el problema en Jelly Bean.

¿Alguien tiene alguna indicación sobre lo que podría estar pasando aquí?

+1

Lo mismo aquí. Galaxy Tab ICS. –

+2

Sí, Nexus 5 ejecuta 4.4.4 llamando 'onResume()' cada 200 ms cuando la pantalla está apagada. –

Respuesta

16

Observé el mismo comportamiento en varios teléfonos con Gingerbread e ICS. Tu descripción coincide con lo que he visto. Por algún motivo, la actividad tiene el onResume activado, aunque la pantalla todavía esté bloqueada. Tal vez se reanuda a algún evento de nivel de sistema operativo?

La mejor dirección de la documentación de Android parece ser de este párrafo en la definición onResume:

Tenga en cuenta que onResume no es el mejor indicador de que su actividad es visible para el usuario; una ventana del sistema como el bloqueo de teclas puede estar en frente. Use onWindowFocusChanged (boolean) para asegurarse de que su actividad sea visible para el usuario (por ejemplo, reanudar un juego).

Al desarrollar su actividad, tenga en cuenta que onResume se puede llamar varias veces en una sucesión rápida, sin interacción directa del usuario. Así que, básicamente, no coloque ningún código en Repetir que solo se pueda ejecutar una vez, o que esté diseñado para desencadenar una respuesta inmediata de un usuario. Tienes que decidir por ti mismo si onResume o onWindowFocusChanged funciona mejor para lo que quieres hacer.

Cuestiones relacionadas