Ejecución periódica de la tarea (una vez al día / una vez a la semana)
Quiero ejecutar una tarea (es decir, obtener mi página de noticias del sitio web) periódicamente (una vez por semana / un día), incluso si mi solicitud está cerrada. ¿Es posible?
- ¿Cómo detener y reanudar una alarma de Android?
- ¿Qué contexto recibe BroadcastReceivers al escuchar BOOT_COMPLETED?
- Código fuente de la aplicación Despertador
- Administrador de alarmas no funciona en segundo plano en Android 6.0
- Android cómo cancelar AlarmManager.setAlarmClock ()
- Actualizar un widget sólo cuando el dispositivo está activado Y el widget está visible en la pantalla de inicio
- Establecer la alarma de Android 4.4 Kitkat
- ¿Por qué Android está ignorando la creación de la Notificación?
- ¿Cómo encuestar un webservice en el intervalo finito de androide?
- Android: Inicio de múltiples intentos pendientes a la misma hora con el Administrador de alarmas
- ¿Alarm Manager persiste incluso después del reinicio?
- Creación de una notificación en un momento determinado mediante el Administrador de alarmas
- Android, ¿Cómo cancelar una alarma? AlarmManager.cancel no funciona
Sí lo es, usted 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 que no se ejecuta constantemente en el fondo. La alarma activa un receptor de difusión que ejecutará su código personalizado.
Como nota final – hay valores de enumeración para el momento de la alarma, incluyendo diarios, medio diario y muchos más, aunque sólo puede establecer un valor real.
Un buen ejemplo se puede encontrar en el siguiente post SO:
Ejemplo del Administrador de alarmas
Actualizar
Se agregaron nuevas funciones a Android. Si está leyendo esto, entonces le aconsejo que ahora mire en GcmNetworkManager . Esto optimiza la vida de la batería y funciona pre-lollipop. Para Lollipop en adelante puede utilizar JobScheduler . Yo aconsejaría usar estas clases sobre el AlarmManager.
Creo que el mejor ajuste es GcmNetworkManager . Básicamente tiene todo lo que necesita de AlarmManager más 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);
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 defendiendo esto es mejor que la solución de Alarma. Sólo estoy mostrando un enfoque diferente.