为啥 ELAPSED_REALTIME 的行为类似于 ELAPSED_REALTIME_WAKEUP

Posted

技术标签:

【中文标题】为啥 ELAPSED_REALTIME 的行为类似于 ELAPSED_REALTIME_WAKEUP【英文标题】:Why does ELAPSED_REALTIME behave like ELAPSED_REALTIME_WAKEUP为什么 ELAPSED_REALTIME 的行为类似于 ELAPSED_REALTIME_WAKEUP 【发布时间】:2018-08-11 01:58:21 【问题描述】:

代码:

Intent intent = new Intent(context.getApplicationContext(), UpdateWidgetService.class);
PendingIntent service = PendingIntent.getService(context,
                    MyCode,
                    intent,
                    PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), iInterval, service);

服务记录其活动。为了进行测试,我按下电源让 android 设备进入睡眠状态。几个小时后我唤醒设备查看日志,发现服务在睡眠期间按照间隔运行。我的理解是 ELAPSED_REALTIME 不会唤醒设备运行。换句话说,在这种情况下,ELAPSED_REALTIME 的行为类似于唤醒设备以运行任务的 ELAPSED_REALTIME_WAKEUP。

有人能解释一下吗?代码或我的测试有问题吗?

【问题讨论】:

【参考方案1】:

您的手机上运行的其他应用程序会不时唤醒它。如果手机由于其他原因已经唤醒,Android 会让你的闹钟触发。

【讨论】:

感谢您的帮助。我怎样才能确定这一点?我已经在平板电脑和普通电视盒上对此进行了测试。它们的行为相同。这两种设备几乎专门用于测试应用程序。他们没有太多其他的东西在运行。

以上是关于为啥 ELAPSED_REALTIME 的行为类似于 ELAPSED_REALTIME_WAKEUP的主要内容,如果未能解决你的问题,请参考以下文章

为啥 XElement 的行为不像引用类型?

为啥 comb 在循环内的行为不同?

为啥 Inputmask 不能正确处理日期?

为啥在没有 ref 的情况下将 list 传递给一个类似于通过 ref 传递的函数?

为啥数组不打印第一个元素?

为啥不破坏 def 形式?