当前位置: 首页 > 知识库问答 >
问题:

Android AlarmManager小时警报运行错误间隔

夏兴生
2023-03-14
Calendar calCurrent = Calendar.getInstance();

int time = 58 ;
Calendar calx = Calendar.getInstance();

calx.set(Calendar.MINUTE, time);
calx.set(Calendar.SECOND, 5);
if (calCurrent.get(Calendar.MINUTE) > time) {
            calx.add(Calendar.HOUR, +1);
}
System.out.println("Alarm is set to - " + calx.get(Calendar.HOUR)+":"+
        calx.get(Calendar.MINUTE));
alarmSwap = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmSwap.setRepeating(AlarmManager.RTC_WAKEUP,
calx.getTimeInMillis(), 60 * 60 * 1000, pintent);

1:23 - Repeating Alarm Set for 1:58 (1 hour intervals)

1:58 - alarm is triggered

3:00 - alarm is triggered

所有的警报器都在一小时后重新启动-

  Calendar calnew = Calendar.getInstance(); calnew.add(Calendar.SECOND, +5); 
  alarm =      (AlarmManager) getSystemService(Context.ALARM_SERVICE);     
  alarm.setRepeating(AlarmManager.RTC_WAKEUP, calnew.getTimeInMillis(),900000 , pintent);

时间线-


1:20 triggered

1:35 triggered

1:50 triggered

2:00 triggered

2:15 triggered

2:30 triggered

共有1个答案

薄涵衍
2023-03-14

来自android文档。

注意:截至API 19,所有重复警报都是不准确的。如果您的应用程序需要精确的交付时间,那么它必须使用一次性的精确警报,如上面所述,每次重新调度。targetSdkVersion早于API19的遗留应用程序将继续将其所有警报(包括重复警报)视为精确警报。

API19之后的重复警报不准确。这提高了android的性能,因为android会分组警报器,警报器的间隔很近,会唤醒系统一次,并完成所有的警报器(来自其他应用程序的警报器也是如此)。如果你真的想要准确的报警,你将不得不设置正常的一次报警,然后在第一次报警的呼叫再次设置报警。

 类似资料:
  • 运行时错误和警告发生在SystemTap安装了检测代码并开始收集数据的时候。 ⁠WARNING: Number of errors: N, skipped probes: M 在运行时出错并/或跳过某些探针。由于诸如给定时间不足以执行完处理程序的原因,某些探针没有得到执行,N和M就是这些探针的数目。 ⁠division by 0 代码里出现了除零错误。 ⁠aggregate element not

  • 我管理一切都很好,创建了一个通知服务,用于作为警报的结果触发通知。不幸的是,使用AlarmManager设置警报不能正常工作。它会在几分钟后触发(而不是几小时,这将表示时区问题)。循环周期为1周,所以我使用了常数INTERVAL_DAY,并将其乘以7。为了确保一个PendingIntent不会替换另一个,我将dayOfWeek作为第二个参数传递给PendingIntent.getService()

  • 问题内容: 我在Windows7上使用maven2.1并得到上述错误。可以提供有关如何解决此问题的建议吗?我使用的是jdk1.6。我收到小程序警报。如何自动允许所有 问题答案: 检查Maven存储库中的.jar文件,使用WinRAR或其他方法打开它们。需要一些时间。您无需检查所有内容,只需检查您最近下载的内容即可。该存储库通常称为“ m2”或“ .m2”,并且通常位于用户配置文件或主目录中,具体取

  • 我目前正在尝试添加一些错误处理,这些错误处理显示在我的web应用程序的前端,但我不知道如何获取套接字。io向前端发送警报框到目前为止的示例,我输入了一个号码来桥接呼叫,如果该呼叫不存在,则显示警报。 代码应该让它看起来更清晰一些。 客户端 单击按钮时,将在输入框中找到的数据发送到服务器端 服务器端 将从客户端接收的数据存储到var中,然后调用静态函数。 停滞功能 使用ARI客户端命令桥接刚刚从客户

  • 嗨,我听到一个错误的说法 组件根本不处理整数。 有时我也会得到作为警报。

  • 我遇到了一点麻烦,因为这似乎是一个简单的问题。 我的场景:我有一个k8s作业,它可以在任何时候运行(不是cronJobs),这反过来又创建了一个pod来执行一些任务。一旦豆荚完成了它的任务,就完成了产生它的工作。 我尝试的是:以下普罗米修斯度量,这是一个即时向量,可以是0(pod不运行)或1(pod正在运行): 我想我试着用这个指标和下面的公式来计算一天中指标为1的持续时间 因为这些豆荚来来往往并