一旦触发,AlarmManager会不断重复

时间:2012-12-01 23:30:05

标签: java android alarmmanager

我需要我的服务每天晚上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不断触发?

1 个答案:

答案 0 :(得分:2)

如果您的pendingIntent设置为启动Service,那么基本上您每次都会在onStart(...)方法中重复创建新的闹钟。

AlarmManager有一种机制,如果设备在应该触发时处于睡眠状态,它会“迟到”触发警报。在您的情况下,因为您经常重新创建警报,AlarmManager经常认为即使时间已经超过02:00:00也应该立即触发。

在其他地方创建闹钟,以防止每次Service开始时不断重新创建闹钟。