Android AlarmManager在5分钟后触发,但不是在所需时间触发

Android AlarmManager在5分钟后触发,但不是在所需时间触发,android,alarmmanager,Android,Alarmmanager,我使用报警管理器每40秒触发一次意向服务。下面的代码是我触发警报和启动服务的方式。我知道警报并不总是在40秒后触发,而且可能会有所不同 但我有一个案例,警报变化很大,每5分钟就持续触发一次 启动警报: Intent alarmIntent = new Intent(context, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

我使用报警管理器每40秒触发一次意向服务。下面的代码是我触发警报和启动服务的方式。我知道警报并不总是在40秒后触发,而且可能会有所不同

但我有一个案例,警报变化很大,每5分钟就持续触发一次

启动警报:

Intent alarmIntent = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
long interval = 40000;
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
@Override
public void onReceive(Context arg0, Intent arg1)
{
     globalVariables.DebugLogging("IsSignedIn: "+GlobalVariables.IsSignedIn+" -DownloadServiceCanStart:- "+GlobalVariables.DownloadServiceCanStart);
     if(GlobalVariables.IsSignedIn)
     {
          if (GlobalVariables.DownloadServiceCanStart)
          {
               GlobalVariables.DownloadServiceCanStart=false;
               Intent intent = new Intent(arg0, DownloadService.class);
               context.startService(intent);
          }
     }
}
报警接收器:

Intent alarmIntent = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
long interval = 40000;
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
@Override
public void onReceive(Context arg0, Intent arg1)
{
     globalVariables.DebugLogging("IsSignedIn: "+GlobalVariables.IsSignedIn+" -DownloadServiceCanStart:- "+GlobalVariables.DownloadServiceCanStart);
     if(GlobalVariables.IsSignedIn)
     {
          if (GlobalVariables.DownloadServiceCanStart)
          {
               GlobalVariables.DownloadServiceCanStart=false;
               Intent intent = new Intent(arg0, DownloadService.class);
               context.startService(intent);
          }
     }
}
这个数字不是很精确

正如官方文件所述:

注意:从API 19(KITKAT)开始,警报传递是不准确的:操作系统 将切换警报,以尽量减少唤醒和电池使用。那里 是支持需要严格交付的应用程序的新API 担保;请参见设置窗口(int、long、long、pendingent)和 setExact(整型、长型、悬挂型)。应用程序 targetSdkVersion早于API 19,将继续看到 以前的行为,其中所有报警都在 请求

还有一个最小间隔为60秒。因此,您的40秒间隔将扩展到60秒

如果您想准确地每40秒运行一次,您可以研究以下答案:

好的,谢谢,我会调查一下,我知道它不精确,但精确到5分钟,然后精确到每5分钟一次,我觉得很奇怪。这是一个错误。另请参见,官方文件是错误的。即使您的目标API<19,在大多数Android 5和所有Android 6设备上,您也无法获得指定的行为。这是一个非常特定于制造商的问题。有人能帮我吗?这是一个Android错误。我想你有三星手机。很多都取决于制造商,三星似乎喜欢使用5分钟的重复。看见