2011-12-23 11 views

Respuesta

45

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:

Alarm Manager Example

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.

+0

Gracias, esto es exactamente lo que estaba buscando. – siemian

+0

@Graham Smith Por interés, ¿escribiste el tuyo? –

+0

@Graham Smith El enlace que proporcionó está roto. ¿Puedes proporcionar un enlace de trabajo? – Zapnologica

6

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.

12

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); 
+1

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. –

Cuestiones relacionadas