1

启动我的应用程序时,会立即触发 AlarmManager,因为时间已经过去了。

我的想法是检查时间表一的实际时间:

if(calendar.before(Calendar.getInstance())); //where calendar is my scheduled calendar

如果上述条件为真,那么:

calendar.add(Calendar.DAY_OF_YEAR, 1);

我认为这会奏效。

然而,混乱发生在第 365 天:

如果预定时间早于实际时间,则按此行加1天:calendar.add(Calendar.DAY_OF_YEAR, 1); 变为1

这不是让它永远成为过去吗?因为没有366?因此,AlarmManager 总是会在过去考虑到它立即触发它?

编辑:

您是否建议我改为:

calendar.add(Calendar.HOUR_OF_DAY, 24);
4

1 回答 1

2

CommonsWare 的评论是正确的;add() 将添加该时间量并适当地调整所有字段。

如果您使用 roll() 而不是 add(),则会发生您担心的行为。但是使用 add() 应该是安全的。

如果您想进一步挖掘,这里是文档。

于 2013-04-24T23:20:42.430 回答