Bom dia!
Estou usando o quartz no meu projeto para agendar algumas tarefas.
Essas minhas tarefas precisam repetir em períodos curtos, por exemplo: 5 em 5 minutos.
É normal que a execução dessas tarefas, ultrapassem os 5 minutos, às vezes elas vão demorar 6 ou 7 minutos.
Quando isso acontecer a tarefa seguinte que estava agendada fica com a execução atrasada, e tenta executar assim que a última tarefa terminar. Isto é uma coisa que eu não quero, eu prefiro que ela execute mais pra frente, no próximo agendamento. Para fazer essa verificação eu fiz um if:
String fireTime = context.getFireTime().toString();
if(context.getPreviousFireTime()!= null && fireTime.equals(context.getScheduledFireTime().toString())){
// minha tarefa.
}
como vocês devem notar, nesse if eu estou especificando que a tarefa atrasada não execute logo em seguida que a outra tarefa terminar, eu quero que ela execute no próximo agendamento. Por exemplo:
inicio da 1ª tarefa: 10:05
tempo programado para a 2ª tarefa: 10:10
A 1ª tarefa terminou 10:12 - ou seja excedeu o tempo de execução
sendo assim, a 2ª tarefa deve executar 10:15 e não 10:12
Com o if que eu fiz, o que eu quero funcionou perfeitamente!!
mas de uma hora pra outra parece que o código tem vontade própria… (É Matrix)
O context.getScheduledFireTime().toString() que outrora, guardava o tempo que estava realmente agendado, por exemplo: 10:10, passa a ter 10:12… e entra no meu if executando a tarefa seguinte às 10:12!!
Bonito né…
Agora vem a dúvida: Alguém sabe porque o context.getScheduledFireTime() está se comportando desta forma?
alguém tem uma solução melhor?!!
valeu!