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

时间:2016-01-18 11:50:56

标签: android alarmmanager

我使用警报管理器每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);
          }
     }
}

1 个答案:

答案 0 :(得分:1)

AlarmManager不是很精确。

正如官方文件所述:

  

注意:从API 19(KITKAT)开始,警报传递是不准确的:操作系统   将移动警报以最小化唤醒和电池使用。那里   是支持需要严格交付的应用程序的新API   担保;请参阅setWindow(int,long,long,PendingIntent)和   setExact(int,long,PendingIntent)。应用程序   targetSdkVersion早于API 19将继续看到   以前的行为,其中所有警报都在何时传递   请求。

最小间隔为60秒。所以你的40秒间隔将扩展到60秒。

如果你想每40秒运行一次,你可以调查这个答案: https://stackoverflow.com/a/9539579/503508