Deseo ejecutar algunas tareas (es decir, obtener la página de noticias de mi sitio web) periódicamente (una vez a la semana/un día), incluso si mi aplicación está cerrada. ¿Es posible?Ejecutar tareas periódicamente (una vez al día/una vez a la semana)
Respuesta
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 broadcast receiver que ejecutará su código personalizado.
Como nota final: hay valores enum para la temporización de la alarma que incluye diariamente, medio día y muchos más, aunque solo puede establecer un valor real.
Un buen ejemplo se puede encontrar en el seguimiento SO mensaje:
actualización
reciente características se han añadido a Android. Si estás leyendo esto, te aconsejaría que ahora mires 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.
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 esto es mejor que la solución de alarma. Solo estoy mostrando un enfoque diferente.
Creo que la mejor opción 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);
Tienes razón; probablemente esta sea la forma normal de hacerlo. Escribí mi respuesta hace 2,5 años, así que las cosas continúan. Yo diría que necesita agregar sobre el Programador de tareas de Lollipop para Android 5+, ya que NO TIENE que usar 'GcmNetworkManager'. Subí por cierto por cierto. –
- 1. Ejecutar tarea una vez a la semana en Heroku
- 2. Ejecutar una vez al día
- 3. error al ejecutar cpan la primera vez
- 4. ¿Cómo ejecuto varias tareas de Rake programáticamente a la vez?
- 5. Ejecutar tareas de vez en cuando en un proceso
- 6. Tareas de C# TPL - Cuántas a la vez
- 7. forzar javascript EventListener para ejecutar una vez?
- 8. Obteniendo un forech para ejecutar una vez
- 9. JavaScript - ejecutar una vez sin booleanos
- 10. Ejecutar dos programas de Java de Eclipse a la vez?
- 11. Ejecutar múltiples arañas de scrapy a la vez usando scrapyd
- 12. ¿Puede jQueryCycle mostrar imágenes múltiples a la vez, pero deslice una a la vez?
- 13. ¿Cómo puedo ejecutar 2 servidores a la vez en Python?
- 14. PHP sirviendo una página a la vez
- 15. En XSLT, puedo ejecutar una plantilla solo una vez
- 16. ¿Cómo activar una función una vez, y solo una vez ...?
- 17. Ejecutar un método una sola vez al principio antes de ejecutar cualquier prueba en PyUnit
- 18. diferencia entre ejecutar curl_close() una vez o con frecuencia?
- 19. Programador de tareas 6 días a la semana
- 20. Llamar a una función solo una vez
- 21. Procesamiento de n elementos a la vez utilizando simultáneamente la Biblioteca de tareas paralelas
- 22. probando perl una vez instalado
- 23. Tarea inmediata de una vez con Cuarzo
- 24. ¿Cómo fuerza a un maven MOJO a ejecutarse solo una vez al final de una compilación?
- 25. carga show_ads.js una vez
- 26. ¿Cómo ejecutar el código en el servicio C# una vez por día a la misma hora?
- 27. Programación de tareas para ejecutar una vez, utilizando el espacio de nombres de la tarea de resorte
- 28. Android View.OnKeyListener: haga clic una vez, ejecutar dos veces
- 29. Obteniendo múltiples mensajes IMAP a la vez
- 30. Guarde varios modelos Backbone a la vez
Gracias, esto es exactamente lo que estaba buscando. – siemian
@Graham Smith Por interés, ¿escribiste el tuyo? –
@Graham Smith El enlace que proporcionó está roto. ¿Puedes proporcionar un enlace de trabajo? – Zapnologica