我正在创建一个与BT设备连接以收集健康数据(即:体温)的应用。
传感器会定期睡眠,并且仅在有限的连接时间内唤醒。
我尝试创建AlarmManager来使用setExactAndAllowWhileIdle()
触发前台服务,并且它可以正常工作超过9分钟,
但在9分钟以下会进入打ze模式,并且不会触发AlarmManager BroadcastReceiver。
从文档中我不了解是否将应用添加到电池优化白名单中将使AlarmManager触发更多攻击 https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases
例如,列入白名单的应用程序的作业和同步被推迟(在API级别23及以下),并且其常规AlarmManager警报不会触发
常规警报是什么?是setExactAndAllowWhileIdle()
正常的吗?
任何澄清将不胜感激
编辑:
我知道setExactAndAllowWhileIdle()
会在打ze模式下触发事件超过9分钟,问题是将应用添加到白名单是否会使其触发频率更高
答案 0 :(得分:2)
常规警报是什么?是setExactAndAllowWhileIdle()常规的吗?
不。 setExactAndAllowWhileIdle()
不正常。常规警报可以是通过setExact()和setWindow()设置的AlarmManager警报。
但在9分钟以下会进入打do模式,并且不会触发AlarmManager BroadcastReceiver
它对您设置警报频率的限制。
为减少滥用,对这些警报的频率进行了限制 将针对特定的应用程序。在正常系统下 操作中,将不会比每次发出更多的警报 分钟(在该时间点,将发出每个此类待处理的警报); 何时 在低功率空闲模式下,此持续时间可能会大大延长, 例如15分钟。
您可以参考Doze restrictions,其中指出:
标准AlarmManager警报(包括setExact()和setWindow()) 推迟到下一个维护窗口。
- 如果您需要设置在打ze睡时触发的警报,请使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。
- 通过 setAlarmClock()设置的警报继续正常触发-在这些警报触发之前,系统会立即退出Doze。
对于白名单:
白名单中可用的应用部分不受Doze和App Standby优化的影响。这并不意味着他们拥有完全的访问权限,并且可以在打ze模式下执行任务。被列入白名单的应用程序可以在Doze和App Standby期间使用网络并持有部分唤醒锁。但是,仍然会施加其他限制,例如工作不同,标准警报触发
注意:您应该check acceptable usecases将应用列入白名单。
Google Play政策禁止应用请求直接豁免 从Android 6.0+(打ze和App Standby)中的电源管理功能获得 除非该应用的核心功能受到不利影响。