He buscado durante 3 días pero no he encontrado una solución o problema/pregunta similar en otro lugar. Este es el trato:AlarmManager desencadena PendingIntent demasiado pronto
gatillo en 1 hora -> funciona correctamente
gatillo en 2 horas -> Va de en 1:23
gatillo en 1 día -> Va de en ~ 11: 00
¿Por qué el AlarmManager es tan impredecible y siempre demasiado pronto? ¿O qué estoy haciendo mal? ¿Y hay otra forma para que funcione correctamente?
Esta es la forma en registro mi PendingIntent en el AlarmManager (simplificada):
AlarmManager alarmManager = (AlarmManager)parent.getSystemService(ALARM_SERVICE);
Intent myIntent = new Intent(parent, UpdateKlasRoostersService.class);
PendingIntent pendingIntent = PendingIntent.getService(parent, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//Set startdate of PendingIntent so it triggers in 10 minutes
Calendar start = Calendar.getInstance();
start.setTimeInMillis(SystemClock.elapsedRealtime());
start.add(Calendar.MINUTE, 10);
//Set interval of PendingIntent so it triggers every day
Integer interval = 1*24*60*60*1000;
//Cancel any similar instances of this PendingIntent if already scheduled
alarmManager.cancel(pendingIntent);
//Schedule PendingIntent
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, start.getTimeInMillis(), interval, pendingIntent);
//Old way I used to schedule a PendingIntent, didn't seem to work either
//alarmManager.set(AlarmManager.RTC_WAKEUP, start.getTimeInMillis(), pendingIntent);
que sería increíble si alguien tiene una solución. ¡Gracias por cualquier ayuda!
Actualización: Hace 2 horas funcionó para activarlo con un intervalo de 2 horas, pero después de eso se activó después de 1:20 horas. Se está poniendo realmente extraño. Seguiré los disparadores con un archivo de registro y lo publicaré aquí mañana.
Actualización: El PendingIntent está programado para ejecutarse cada 3 horas. A partir de la segunda línea del registro parece como un viejo PendingIntent programada todavía se está ejecutando:
[2012-5-3 2:15:42 519] Updating Klasroosters
[2012-5-3 4:15:15 562] Updating Klasroosters
[2012-5-3 5:15:42 749] Updating Klasroosters
[2012-5-3 8:15:42 754] Updating Klasroosters
[2012-5-3 11:15:42 522] Updating Klasroosters
Pero, estoy seguro de que cancela la programada PendingIntent de antes de programar una nueva. Y cada PendingIntent no se recrea de la misma manera, por lo que debería ser exactamente igual. Si no, esta pregunta de hilos ya no es relevante.
No puedo recrear tu problema. Exactamente, ¿cómo cambias 'start' para avanzar 2 horas, también 1 día? – Sam
Agregué el archivo de registro y descubrí que probablemente todavía se está ejecutando un PendingIntent antiguo. – Wezelkrozum
Tengo el mismo problema también, ¿tiene una solución de trabajo? – david