JobScheduler: mejora de batería en Android L para tareas en segundo plano
Durante el pasado Google I/O 2014 se presentó Android L, la nueva versión de Android que llegará a final de año para el público, ya disponible en Preview. En esta versión, nos han presentado los nuevos patrones de diseño que predominarán en él y que han denominado Material Design.
Pero no todo lo que hay detrás de Android L es diseño. Trae consigo grandes mejoras, y una de ellas tiene que ver con la eficiencia energética a través del proyecto Volta persiguiento la optimización de la batería.
Esto no quiere decir que no podamos acudir a más recursos. Y es que realmente los desarrolladores de terceros deberían pensar en formas de mejorar sus apps.
Antecedentes
Hasta ahora, si un desarrollador quería ejecutar una tarea en segundo plano (por ejemplo, para solicitar datos a un servidor o simplemente ejecutar un trabajo intensivo para el procesador), la aplicación tenía que escuchar ciertos eventos o programar alarmas periódicas para hacer comprobaciones. Además, la app debía estar determinando si las condiciones (por ejemplo, acceso a Internet) eran ideales o debía posponer algún trabajo.
Todo esto nos podía inducir, como programadores, a errores. Pero es que además ¡había momentos en los que una app se ejecutaba sólo para volver a esperar!
De hecho, a muchos de vosotros ya os sonará la clase AsyncTask, una clase que nos servía para realizar estas tareas en segundo plano. Luego teníamos los mensajes Broadcast, para notificar acciones. Todo esto, con la ayuda del AlarmManager nos permitía montar la estructura de la que hablábamos. Así, podíamos llegar a un ejemplo de código como el siguiente:
Pero la cosa no acababa ahí, pues podíamos usar otras alternativas, como la del uso de Services y ContentProvider. Con estas clases y el uso de un SyncAdapter, podremos crear otra forma de descargar información en segundo plano. Pero esto sigue sin solucionar nuestro problema.
JobScheduler, la alternativa
Con esta tesitura nace JobScheduler. Su misión es actuar como un despachador de aplicaciones, responsable de lanzar aquellas que estén en las condiciones adecuadas, por lo que ya no será necesario vigilar de una forma manual si estamos o no en las condiciones necesarias.
Para ello, los desarrolladores simplemente deben registrar una solicitud con un conjunto de criterios, para los cuales el programador de tareas despertará la aplicación cuando esté listo y los cumplan. No sólo nos servirá para lanzar apps cuando estemos dentro del alcance WiFi o conectados al cargador, sino incluso para despertar apps con cierta frecuencia.
Sin duda, es un gran avance y una gran mejora para el desarrollador. Para ello, os recomendamos empezar por la presentación que hicieron durante el Google I/O:
Una vez presentado, lo mejor es ver cómo funciona el JobScheduler, para lo que sin duda os recomendamos echar un vistazo a otro de los vídeos de Google Developers en Youtube:
Podríamos utilizar un ejemplo con JobScheduler, de tal forma que permitamos la ejecución de un trabajo en segundo plano a través de un Servicio, con varios parámetros que indiquen cuándo la ejecución debe tener lugar:
A partir de ahí, podríamos lanzar el trabajo en segundo plano tanto una vez como de forma periódica, de forma sencilla:
Conclusiones
JobScheduler nos permite configurar esquemas para ejecutar trabajos en segundo plano de una forma mucho más simple, basaco en los servicios. Además, nos ayudará a evitar errores como programadores y ahorrar batería. Pero uno de los detalles para que los programadores lo usen radicará en si estará disponible en alguna librería support o sólo podremos utilizarlo en versiones Android L o posteriores.
Más información Android Oficial | Speaker Deck | AndroidPolice