2011-09-16 9 views
7

En la demostración https://github.com/commonsguy/cwac-wakeful, se llama al método OnAlarmReceiver (un BroadcastReceiver) onReceive() en respuesta a una alarma. El método onReceive() inicia el Servicio. Se utilizan dos Intents, uno recibido por BroadcastReceiver y el otro por el Servicio. Esto parece más complicado de lo que debe ser, ¿por qué no solo el servicio recibe la intención del AlamManager?Servicio de despertador directamente desde AlarmManager

Entiendo que el teléfono está garantizado para no dormir mientras se está ejecutando onReceive(), es decir, está envuelto con un bloqueo de activación. No estoy seguro de si la clase de servicio ofrece garantías similares.

¿Hay alguna manera de iniciar el servicio directamente desde una alarma mientras se garantiza que el teléfono se despertará y no se apagará hasta que se pueda adquirir un bloqueo por activación?

Respuesta

14

Esto parece más complicado de lo que debe ser, ¿por qué no simplemente hacer que el servicio reciba la intención del AlamManager?

Debido a que Android no garantiza que el dispositivo va a permanecer despierto el tiempo suficiente para una getService()PendingIntent a invocar. La garantía es solo para getBroadcast()PendingIntent - Android garantiza que el dispositivo permanecerá despierto (a través de WakeLock) durante la duración de su llamada onReceive().

Confíe en mí, me gustaría poder omitirlo.

+0

Bien, gracias por la respuesta – alexbirkett

+0

oh eso es genial - Me preguntaba sobre lo mismo - al parecer [en el ejemplo de alarma simple de los ejemplos de la API esto no es una preocupación] (http://stackoverflow.com/a/ 14094314/281545) - o me estoy perdiendo algo? –

+1

@Mr_and_Mrs_D: Esa muestra tiene tantos problemas, ni siquiera es divertida. Algún día, archivaré un problema para poder cambiarlo. – CommonsWare

Cuestiones relacionadas