当启动我的应用程序时,AlarmManager 被立即触发,因为时间已经过去了。
我的想法是用时间表检查实际时间:
if(calendar.before(Calendar.getInstance())); //where calendar is my scheduled calendar
如果上述条件为真则:
calendar.add(Calendar.DAY_OF_YEAR, 1);
我认为这会奏效。
然而,困惑是在第 365 天:
如果预定时间早于实际时间,则会根据此行添加一天:calendar.add(Calendar.DAY_OF_YEAR, 1);
它将变成1
那不就让它永远成为过去吗?因为没有366?因此 AlarmManager 总是会立即触发它,考虑到它在过去吗?
编辑:
你建议我改为:
calendar.add(Calendar.HOUR_OF_DAY, 24);
最佳答案
CommonsWare 的评论是正确的; add() 将添加该时间量并适当调整所有字段。
如果您使用 roll() 而不是 add(),就会出现您担心的行为。但是您应该放心使用 add()。
这是 doc如果您想进一步挖掘。
关于java - AlarmManager 被立即触发,因为时间过去了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203278/