Ejecución periódica de tareas (una vez al día / una vez a la semana)

Quiero ejecutar alguna tarea (es decir, obtener la página de noticias de mi sitio web) periódicamente (una vez por semana / por día), incluso si mi aplicación está cerrada. ¿Es posible?

Sí, lo es, necesita mirar el AlarmManager para configurar una “Alarma” recurrente. Esto es mejor para la duración de la batería en el dispositivo, ya que a diferencia de un servicio, no se ejecuta constantemente en segundo plano. La alarma activa un receptor de difusión que ejecutará su código personalizado.

Como nota final, hay valores enum para el tiempo de la alarma incluyendo diariamente, medio día y muchos más, aunque solo puede establecer un valor real.

Un buen ejemplo se puede encontrar en la siguiente publicación SO:

Ejemplo de Alarm Manager

Actualizar

Las nuevas características se han agregado a Android. Si está leyendo esto, le aconsejaría que ahora busque en GcmNetworkManager . Esto optimiza la duración de la batería y funciona antes de la piruleta. Para Lollipop en adelante puede usar JobScheduler . Aconsejaría usar estas clases sobre el AlarmManager.

Creo que lo mejor es GcmNetworkManager . Básicamente tiene todo lo que necesita de la persistencia de AlarmManager plus, por lo que el trabajo puede continuar ejecutándose después del reinicio.

Ejemplo:

PeriodicTask task = new PeriodicTask.Builder() .setService(MyTaskService.class) .setTag(TASK_TAG_PERIODIC) .setPeriod(5L) .build(); mGcmNetworkManager.schedule(task); 

Como alternativa, estoy comparando la semana actual:

 Calendar cal = Calendar.getInstance(); int currentWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR); SharedPreferences sharedPreferences= this.getSharedPreferences("appInfo", 0); int weekOfYear = sharedPreferences.getInt("weekOfYear", 0); if(weekOfYear != currentWeekOfYear){ SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt("weekOfYear", currentWeekOfYear); editor.commit(); // Your once a week code here } 

No defiendo que esto sea mejor que la solución de alarma. Solo estoy mostrando un enfoque diferente.

    Intereting Posts