问题描述: 设置Alarm发送广播,并在广播中继续设置Alarm达成循环发送心跳,间隔为10s,然而在设备息屏后,大概1分钟之后心跳停止,之后很久才发送一次,与设定的不符,连接数据线的话不会有这种情况。
查找很多相关博客,总结如下: 原因是息屏后,设备开始进入深度休眠,具体可以了解下Doze模式,然后隔一段时间执行延迟的Alarm等。在6.0之后,setExactAndAllowWhileIdle与setAndAllowWhileIdle能在低功耗模式下唤醒,但9分钟内只执行一次,不适合频繁唤醒。 也考虑过添加白名单,暂未在6.0以上测试,不过看起来也没有效果,因为进程并没有被干掉,而且此处主要是Alarm唤醒被延迟的问题,看描述白名单并不能解决延迟,之后会进行尝试。 还有一个GCM的,具体没深入了解。 最后是师傅在中间层修改,将设备省电模式改成永不休眠,不过这样耗电量会很大。 本人初学,上述描述有误欢迎指正。