AlarmManager 在每个测试设备上的工作方式不同

AlarmManager does not work in the same way on every tested device

我目前正在开发一个应用程序,需要同时触发多个警报。

为此,我创建了一个接收器来安排下一个闹钟。 我还创建了一个压力测试:

alarmManager 调用我的接收器,为下一分钟创建另一个警报。 在 xx:30 和 xx:00 我收到一封邮件,其中包含所有警报的日志,其中包含预期日期和触发日期。

在我的 phone 三星 galaxy note 3 lite 上一切正常。 遗憾的是,所有设备上的行为都不相同。

所以我想知道,如果某些设备有一个 alarmManager 可以在它滥用系统时停止某些警报。不幸的是,我没有找到足够多的 Doc 来支持这个理论。 你遇到过这样的问题吗,你是怎么解决的? 您如何才能使系统能够在正确的时间以 > 95% 的成功率发送通知?

我遇到了同样的问题,经过大量搜索和解决方法后,我认为 Lollipop 及更高版本中三星设备的智能管理器可能是问题所在。此组件可以延迟警报管理器关闭,如果手机使用电池供电且屏幕关闭,则它会在 3 分钟后触发。当然,您可以像这样停用智能管理器:

  • 在设备上启动 Samsung Smart Manager 应用程序
  • 点击电池
  • 点击应用优化
  • 详情
  • 找到你的应用程序
  • Select "Disabled for"

但在我的情况下它不起作用,禁用智能管理器在 2 台带有 Lollipop 的三星设备上都不起作用。它所做的工作是 "fool" 智能管理器,通过重构我的应用程序包的名称以包含字符串 "alert" 或 "alarm",例如 com.example.alarm.myApplication。您也可以参考此link了解更多信息。

还有一些其他公司,如华为,也有自己优化的应用程序,可以延迟 AlarmManager。 此外,新组件 Android Doze 可能会延迟 AlarmManager 请参考这个link。 最后,您的 phone 运行良好,因为低于 Lollipop 并且不包含三星的 SmartManager。