2011-04-11 15 views
5

Estoy escribiendo una aplicación de cliente de Android que sigue recibiendo notificaciones push de un servidor utilizando HTTP larga-polling (Comet).¿Qué eventos pueden activar un dispositivo Android para dormir?

No quiero mantener siempre WakeLock porque va a agotar la batería, pero necesito asegurarme de que el dispositivo pueda recibir notificaciones incluso cuando está en modo de suspensión.

Y me encontré con esta pregunta:

Android: Sleep stages/levels on an Android device?

donde "CommonsWare" mencionó que un paquete entrante en un socket no Wifi despertará el dispositivo.

Así que mi solución es similar a esto:

Client ------------------------- Server 
       ---- Request-----> 
    release WakeLock     (Allow device to sleep) 





       <----Notification-- (Hopes it can wake up the device) 
    require WakeLock 
    process the notification 
       ---- Request-----> 
    release WakeLock   
    .... 

pero hay una pequeña ventana de tiempo entre la recepción de la notificación y que requiere la wakelock, por lo que mi pregunta es, ¿cuánto tiempo el dispositivo a mantener este estado despierto? ¿Es posible que el dispositivo vuelva a dormir durante esta ventana de tiempo?

Respuesta

0

El dispositivo estará despierto durante el tiempo suficiente para ejecutar un código corto en el BroadcastReceiver. No he podido encontrar un número exacto de millis, pero la idea es que en su receptor, debe tomar cualquier WakeLock que necesite para proceder con su propio procesamiento.

Sin embargo, la gestión exacta del WakeLock puede ser complicada. Recomiendo el uso de @WakefulIntentService de CommonsWare:

Cuestiones relacionadas