1

我只是功能的启动服务,重复他:为什么服务不能“立即”工作?

mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 

PendingIntent pIntent = PendingIntent.getService(mContext, 
       SendStatusService.SEND_STATUS_SERVICE_CODE, 
       mIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 

mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime() + 2000, 
       mIntervalInMs, 
       pIntent); 

我理解的文档:报警经理无论设备状态(休眠或不)到2000毫秒启动服务,并与间隔mIntervalInMs重复。

但运行此代码后30-50秒后服务开始工作。我做错了什么或不明白文档?

+0

您的应用程序运行在哪个Android版本上?另外,你的'targetSdkVersion'是什么? – CommonsWare

+0

@CommonsWare设备:三星23(Android 6)和目标:targetSdkVersion 25 – abbath0767

回答

1

setRepeating()在“API Level 19+”Android设备上运行时,“不精确”,而且targetSdkVersion为19或更高。因此,你的结果并不令人惊讶。这些事件将在所需时间的某个地方发生(直到Android 6.0的打盹模式开始),但它们不会恰好在期望的时间发生。

+0

hm。我有标志ACTION_IGNORE_BATTERY_OPTIMIZATION和他的权限设置(应用程序只有我,我知道什么是坏=))。那么如何用时钟警报工作的另一个应用程序?他们在某个时间唤醒用户(和智能手机),不提前一分钟或之后。 – abbath0767

+0

@ abbath0767:“那么如何用时钟警报工作的另一个应用程序?” - 闹钟应用程序将使用'AlarmManager'上的'setAlarmClock()'。有关更多信息,请参见[此答案](https://stackoverflow.com/a/34699710/115145)。 – CommonsWare

相关问题