2011-05-19 9 views
22

Tome la aplicación de Gmail como un ejemplo. Ya sea que el teléfono esté encendido o no, sondea cada 10 minutos más o menos para descargar nuevos correos electrónicos que pueden haber llegado desde la última vez que lo verificó.La mejor manera de tener una aplicación de Android encuesta periódicamente en el fondo

Sé cómo crear un nuevo servicio y vincularlo. Pero puedo ver algunas maneras de lograr esto:

  • Enlazar una vez, y que tienen el servicio que se ejecuta en un bucle infinito, dormir durante 10 minutos entre cada bucle
  • Enlazar y derecha unbind cuando esté hecho, la programación de la al lado de alguna manera se unen en 10 minutos
  • Utilización de la clase AlarmManager para programar futuras encuestas

¿Cuáles son las compensaciones? ¿Cómo lo logra la aplicación Gmail?

Gracias!

+0

¿No usa Gmail Android Cloud To Device? Supongo que sí ... pero es una suposición descabellada sin ningún conocimiento concreto. http://android-developers.blogspot.com/2010/05/android-cloud-to-device-messaging.html – neteinstein

+0

@NeTeInStEiN parece que sí, me equivocaron –

Respuesta

18

La aplicación Gmail utiliza empujar, no sondear. Sugiero usar esta técnica en su lugar, el sondeo es un asesino de batería en dispositivos móviles.

Para implementar el empuje, eche un vistazo a C2DM.

Si aún desea realizar una encuesta, la forma recomendada sería configurar una alarma periódica en el AlarmManager.

ACTUALIZACIÓN: Google ha desaprobado C2DM y lo reemplazó con Google Cloud Messaging (GCM)

ACTUALIZACIÓN: Google ha desaprobado GCM y lo reemplazó con Firebase Cloud Messaging (FCM)

+2

O bien, considere Urban Airship o Xtify como una oferta de servicios comerciales soluciones similares a C2DM. – CommonsWare

+0

@CommonsWare Una cosa a tener en cuenta es que si todos implementan su propio servicio de empuje, entonces se pierde todo el punto. Creo que deberíamos seguir con C2DM, nos guste o no. – aromero

+1

"Una cosa a tener en cuenta es que si todos implementan su propio servicio de empuje, entonces se pierde todo el punto". - eres bienvenido a tu opinión. C2DM es un proyecto beta de Google Labs y, por lo tanto, puede carecer de las garantías de soporte y nivel de servicio que algunas compañías pueden desear. – CommonsWare

5
  • Para una encuesta continua, pero no intensiva como el que usted comenta (en el rango de minutos entre encuestas), lo implementaría con AlarmManager. De esta forma, se asegura de que el teléfono se active para sondear sin la necesidad de un wakelock, lo que destruiría su batería. Como señaló CommonsWare, aún necesitará implementar un wakelock para el momento en que se está ejecutando su código, pero puede liberarlo tan pronto como se haya completado el código, evitando mantener el teléfono mientras espera. Vea su comentario para ver un ejemplo sobre cómo implementarlo.

  • Usaría un servicio si, en cambio, necesitara encuestas más rápidas durante un período de tiempo más corto (segundos entre cada encuesta), ya que configurar alarmas no tiene sentido en esos períodos cortos y la batería se agotaría de todos modos.

+3

Aún necesita un 'WakeLock' si el trabajo que realizará tardará un tiempo considerable, ya que el' BroadcastReceiver' invocado por la alarma no puede hacer mucho en 'onReceive()'. Consulte el 'WakefulIntentService' para obtener un resumen del trabajo' WakeLock': https://github.com/commonsguy/cwac-wakeful – CommonsWare

+0

@CommonsWare, tiene razón, pero lo que quería decir es que no necesita mantenga el teléfono encendido cuando no * nada *. Por cierto, esa es una gran demostración. Lo estudiaré en detalle. – Aleadam

+0

Oh, estoy totalmente de acuerdo: un servicio imperecedero solo para ver cómo funciona el reloj es un antipatrón. Solo estaba criticando un poco la parte "sin la necesidad de un wakelock", eso es todo. – CommonsWare

Cuestiones relacionadas