我需要我的服务每天晚上02:00执行任务,如果任务失败,则安排自己在30分钟后重新开始,但如果成功则停止自己并在02:00再次启动。我设法让它从02:00开始,但是在它被触发之后它只是连续地触发它。
我的代码位于Service
,这是代码本身:
@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()
是我需要运行的任务,但由于它们很慢,我使用通知声音进行测试。 pendingIntent就是Service
本身。
有什么想法让我的AlarmManager
不断触发?
答案 0 :(得分:2)
如果您的pendingIntent
设置为启动Service
,那么基本上您每次都会在onStart(...)
方法中重复创建新的闹钟。
AlarmManager
有一种机制,如果设备在应该触发时处于睡眠状态,它会“迟到”触发警报。在您的情况下,因为您经常重新创建警报,AlarmManager
经常认为即使时间已经超过02:00:00也应该立即触发。
在其他地方创建闹钟,以防止每次Service
开始时不断重新创建闹钟。