sábado, 25 de febrero de 2012

Entendiendo los agentes en segundo plano de Windows Phone

Siguiendo con la aplicación que les presenté en el post anterior, Pocket Pillbox, planeo que los recordatorios los haga un agente en segundo plano, meramente por aprender a usarlos, ya que podría usar simplemente notificaciones y alertas teniendo en mente como les comenté en otro post que las alertas y notificaciones tienen un límite de 50 por aplicación.

Actualmente no existe la posibilidad de ejecutar nuestras aplicaciones en background (segundo plano) en Windows Phone 7 a 7.5, esto significa que nuestras aplicaciones solo puede estar en primer plano, sin embargo en algunas ocasiones como en la aplicación que les presento de ejemplo, podríamos querer ejecutar un fragmento de código o una funcionalidad especifica aunque nuestra aplicacion no este funcionando, pues bien para eso existen los agentes en segundo plano o background agents.

Lo primero que debemos saber es que solo podemos tener una agente de segundo plano en nuestra aplicación y este aparece en la sección de configuracion del telefono y el usuario puede detenerlo a su gusto.


Los agentes en segundo plano pueden ejecutarse de forma periódica o de forma intensiva (basadas en la clase PeriodicTask, o las tareas intensivas, basadas en la clase ResourceIntensiveTask). Las tareas periódicas funcionan ejecutándose cada X tiempo, las tareas intensivas se ejecutan durante 10 minutos siempre y cuando la batería sea superior al 90%, se esté conectado a la energía externa y ademas si esta conectado por Wifi o conexión a PC a internet, no por GPRS, además no debe existir una llamada activa, es un escenario bastante restrictivo. Como siempre el detalle de estas restricciones lo pueden encontrar en MSDN.

Con los agentes en segundo plano, debemos cuidar que el proceso que lancemos no sea pesado para consumir mucha bateria, ya que este puede ser un criterio por el cual nuestra aplicación sea rechazada en el Marketplace, por eso tenemos que tener en cuenta las restricciones. Debemos saber además que si se activa el modo ahorro de batería, esto puede retrasar hasta 10 minutos la ejecución de las tareas periódicas e incluso podria llegar a no ejecutarse.

Una de las restricciones que manejan los agentes  tiene que ver con la memoria, si usamos más de 6 MB el sistema terminará la tarea. Además aunque disponemos de la ExpirationTime en nuestro agente, la fecha nunca podrá ser superior a dos semanas desde la fecha establecida en la propiedad BeginTime y tendremos que renovarlo.

Además debemos tener presente que no todas las APIs del teléfono están disponibles para los agentes en segundo plano, es el caso de la cámara, la radio, los sensores, el reproductor de audio, las transferencias en segundo plano, la navegación entre otras, las cuales encontrarán detalladamente en la documentación oficial de MSDN.

Recuerda que las notificaciones toast si están disponibles si lo que quieres es llamar la atención de un usuario desde tu agente en segundo plano.

Por el momento aquí dejo esta pequeña contextualización y ya vendrán más post donde les cuento como me va con mi implementación.

Sorey
Publicar un comentario en la entrada