警报管理器有时很长 运行 的意图

Alarm Manager is sometimes very long to run the intent

AlarmManager 有问题。设置闹钟后,如果闹钟的时间已经过去,则开始启动意图,这很好。但有时在意图开始之前会有很长的时间(从 30 秒到 3 分钟)。如果有人知道为什么,我很想知道。

这是我的代码:

 public static void setAlarm()
        {
            Intent intent = new Intent(Application.Context, typeof(AlarmReceiver));
            intent.SetAction("ExchangeGo");
            PendingIntent pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, intent, PendingIntentFlags.CancelCurrent);
            Calendar dayCalendar = Calendar.GetInstance(Java.Util.TimeZone.Default);
            dayCalendar.Set(CalendarField.HourOfDay, 8);
            dayCalendar.Set(CalendarField.Minute, 30);
            dayCalendar.Set(CalendarField.Second, 0);
            dayCalendar.Set(CalendarField.Millisecond, 0);       
            AlarmManager alarm = Application.Context.GetSystemService(Context.AlarmService).JavaCast<AlarmManager>();
            alarm.Cancel(pendingIntent);
            alarm.SetRepeating(AlarmType.RtcWakeup, dayCalendar.TimeInMillis, AlarmManager.IntervalDay, pendingIntent);

        }

这里的意图是:

   [BroadcastReceiver]
    public class AlarmReceiver : BroadcastReceiver
    {
        private  String SOMEACTION = "ExchangeGo";
        public override void OnReceive(Context context, Intent intent)
        {
            String action = intent.Action;
            if (SOMEACTION.Equals(action))
            { 
                Intent intentService = new Intent(context, typeof(ExchangeService2));
                context.StartService(intentService);
            }
        }
    }

manifest 没有问题,因为它有效,只是有时有点太长了。而且这个问题不是我的第二个意图,因为我在断点之前放了一个断点,等待时间在断点之前。

有人吗?

感谢阅读我的文章。

因为 setRepeating() 不保证 它会在准确的时间发生。 这就是为什么你会延迟 30 秒到 3 分钟。

setRepeating() 替换为 setExact() 参考来自 Here

的文档
manager.setExact(AlarmManager.RTC, startTime.getTimeInMillis(), operation);

重复,您可以做的是,在执行您的当前事件后再次安排此警报 =28=]。因此,当您的 1st 意图被执行时,仅使用 setExact()2nd 事件安排警报。这将保证您期望的时间准确性