2

我需要我的服务在每晚 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()是我需要运行的任务,但因为它们很慢,我使用通知声音进行测试。而pendingIntentService本身就是这个。

任何想法是什么让我AlarmManager不断地触发?

4

1 回答 1

2

如果您pendingIntent设置为开始,Service那么基本上您每次在该onStart(...)方法中都重复创建一个新警报。

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

在其他地方创建警报,以防止每次Service启动时不断重新创建警报。

于 2012-12-02T00:14:59.470 回答