java - AlarmManager 被立即触发,因为时间过去了

标签 java android

当启动我的应用程序时,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/

相关文章:

java - 无法使用 REST 架构和 Angular JS 在 Spring Boot 中映射新 url,并且发布请求未接收对象字段值

java - 句子之间的语义相似度

android - 小部件 - 无法实例化接收器

android圆角矩形无背景直边矩形

javascript - 使用 JavaScript 在 Android 中显示软键盘

用于从位于服务器中的 .ser 文件读取对象的 Java 程序

java - 无法解析 R.array

java - 字符串的正则表达式,其中某个位置包含一个或多个字母

java - 通过自定义适配器将已添加书签的项目的状态保存到 SQLite 表

android - 使用 Retrofit 检查响应的数据类型