android - tutorial - Ejecución de la tarea periódicamente(una vez al día/una vez a la semana)
best alarm app iphone (3)
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 estoy abogando por que esto sea mejor que la solución Alarm. Solo estoy mostrando un enfoque diferente.
Quiero ejecutar algunas tareas (es decir, obtener la página de noticias de mi sitio web) periódicamente (una vez por semana / día), incluso si mi aplicación está cerrada. ¿Es posible?
Creo que el mejor ajuste es GcmNetworkManager . Básicamente tiene todo lo que necesita de AlarmManager más la persistencia, por lo que el trabajo puede continuar ejecutándose después de reiniciar.
Ejemplo:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(5L)
.build();
mGcmNetworkManager.schedule(task);
Sí, es necesario mirar el AlarmManager para configurar una "Alarma" recurrente. Esto es mejor para la vida útil de la batería del 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 de enumeración para la temporización de la alarma, que incluyen diario, medio diario y muchos más, aunque solo puede establecer un valor real.
Un buen ejemplo se puede encontrar en la siguiente publicación de SO:
Ejemplo de administrador de alarmas
Actualizar
Se han añadido nuevas funciones a Android. Si estás leyendo esto, te aconsejo que ahora mires en GcmNetworkManager . Esto optimiza la duración de la batería y funciona pre-piruleta. Para Lollipop en adelante puedes usar JobScheduler . Yo aconsejaría usar estas clases sobre el AlarmManager.