【问题标题】:Why service does not work "immediately"?为什么服务不能“立即”工作?
【发布时间】:2017-07-03 14:27:26
【问题描述】:

我只是简单地启动服务并重复他:

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 秒后开始工作。我做错了什么或不了解文档?

【问题讨论】:

  • 您的应用在哪个版本的 Android 上运行?另外,你的targetSdkVersion是什么?
  • @CommonsWare 设备:三星 23(android 6)和目标:targetSdkVersion 25

标签: android alarmmanager android-pendingintent intentservice


【解决方案1】:

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

【讨论】:

  • 嗯。我有标志 ACTION_IGNORE_BATTERY_OPTIMIZATION 和他在设置中的许可(只有我的应用程序。我知道什么是坏的=))。那么如何使用另一个带有时钟闹钟的应用程序呢?它们会在特定时间唤醒用户(和智能手机),而不是早晚一分钟。
  • @abbath0767:“那么如何使用另一个带有时钟警报的应用程序呢?” -- 闹钟应用将在AlarmManager 上使用setAlarmClock()。请参阅this answer 了解更多信息。
猜你喜欢
  • 2015-08-30
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 2016-02-21
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多