Java AlarmManager在触发后不断重复
我需要我的服务在每晚02:00执行任务,如果任务失败,则计划自己在30分钟后重新启动,但如果成功,则停止自己并在另一天晚上02:00重新启动。我设法让它在02:00开始,但在它被触发后,它只是不断地触发自己 我的代码在Java AlarmManager在触发后不断重复,java,android,alarmmanager,Java,Android,Alarmmanager,我需要我的服务在每晚02:00执行任务,如果任务失败,则计划自己在30分钟后重新启动,但如果成功,则停止自己并在另一天晚上02:00重新启动。我设法让它在02:00开始,但在它被触发后,它只是不断地触发自己 我的代码在服务中,下面是代码本身: @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); //doTasks();
服务中
,下面是代码本身:
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//doTasks();
MediaPlayer player = MediaPlayer.create(this,
Settings.System.DEFAULT_NOTIFICATION_URI);
player.start();
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
}
doTasks()
是我需要运行的任务,但由于它们速度慢,我使用通知声音进行测试。而pendingent就是这个服务本身
你知道是什么让我的AlarmManager
不断触发吗?如果你的PendingEvent
设置为启动服务
,那么基本上你每次都在用onStart(…)
方法重复创建一个新的报警
AlarmManager
有一种机制,如果设备在本应触发时处于休眠状态,它将触发“延迟”报警。在您的情况下,因为您不断地重新创建报警,AlarmManager
不断地认为应该立即触发报警,即使时间超过02:00:00
在其他地方创建报警,以防止每次启动服务时不断地重新创建报警。如果您的pendingent
设置为启动服务
,则基本上每次都在onStart(…)
方法中重复创建报警。在其他地方创建报警(例如,在活动中或在扩展应用程序的类中)。但是,它不应该只在02:00触发,而不管它是在哪里创建的吗?是和否。AlarmManager
有一种机制,它会“延迟”触发报警如果设备在本应触发时处于休眠状态。在您的情况下,因为您不断地重新创建报警,AlarmManager
不断地认为应该立即触发报警,即使时间超过了02:00:00,onCreate中创建的报警仍然有效,显然,无论您在何处创建报警都很重要,我永远不会猜到。谢谢做一个答案,我会接受它作为工作解决方案。将评论转换为答案。