2011-07-16 4 views
7

Acabo de desarrollar una aplicación de protector de pantalla y encontré un comportamiento extraño en su ciclo de vida. Mi flujo de trabajo es la siguiente:Extraño comportamiento del ciclo de vida en mi aplicación Screen Saver

  1. empezar mi RegisterService, donde me llamo registerReceiver método para registrar un BroadcastReceiver, que puede recibir ACTION_SCREEN_OFF.

2.In el método de esta BroadcastReceiveronReceive, comienzo a una actividad como el protector de pantalla.

3.En la actividad, escribo la declaración Log.i() para rastrear su ejecución.

Mi pregunta es:

Cuando los tiempos de pantalla, o cuando se presiona la tecla de encendido, la pantalla se apaga, y el sistema enviará el mensaje de ACTION_SCREEN_OFF. Como espero, mi receptor inicia la actividad de protector de pantalla. Sin embargo, encuentro que esta actividad llama al onCreate(), onResume(), onPause(), onResume() secuencialmente de acuerdo con la salida en logcat.

Parece como si alguna una actividad llega en frente de mi protector de pantalla y termina de inmediato, por lo que mi protector de pantalla llama onPause() y luego onResume(). enter image description here

¿Alguna idea? Este problema me perjudica en la programación, por favor ayuda. ¡Gracias!

+1

qué problema causa? – njzk2

Respuesta

0

Te puedo recomendar algo muy fácil que podría funcionar para usted, si usted no desea que el comportamiento de pausa ¿por qué no intenta reemplazar el método onPause() y simplemente no hacer nada: P no llame super.onPause() y eso terminará su comportamiento.

Otra cosa que podría funcionar para usted, declare una variable estática, agregue 1 en el método "onResume()" y vuelva a "0" cuando se llame a "onStop()". ahora solo evalúa cuando se llama a "onResume()" y si la variable es "0", entonces es la primera vez, cualquier otra cosa no hace nada.

Espero que esto ayude porque no hay mucha información sobre su pregunta para ser más específico.

0

Bueno basan en un breve estudio del código fuente PowerManagerService.java, cuando es el momento de apagar la pantalla, el sistema inicia una animación (vea la línea 2183 para la fuente de la clase) para hacer eso. Eso significa que su actividad se detendrá y luego se reanudará una vez que la animación haya finalizado.

No puedo estar 100% seguro de esto, ya que no lo he probado en mi entorno, pero esta es la única explicación lógica que encontré para su situación.

Espero que esto ayude ...

Cuestiones relacionadas