解决AlarmManager时间不准

本文探讨了在Android中使用AlarmManager时遇到的时间精度问题,特别是从API19开始的不精确性。文章介绍了AlarmManager的几种类型及其唤醒CPU的能力,并提出了使用setWindow()、setExact()和setAlarmClock()等方法来确保精准通知。同时,解释了AlarmManagerService的工作原理,如何在节能模式下批量处理Alarm以节省电量,以及这可能导致的多个Alarm一起触发的情况。最后,指出了setAlarmClock方法的限制和适用条件。
摘要由CSDN通过智能技术生成

言归正传! 在最近的Bug中发现一个问题,项目有用到预约的功能,所以就使用了AlarmManager来进行定时提醒的功能。当时开发这个功能的时候并没有发现会有这种Bug,原因是开发时只会预约一个来测试功能是否有实现,实现了就算完成,而这个问题恰好是有多个预约时才会发生的问题(这里的多个预约是指系统中有多个AlarmManager的定时,具体为什么这样说,下面我会提到),比如当我进行了10个预约,也就是设定了10个AlarmManager的时候,我让设备休眠(我用的Type是RTC_WAKEUP),依次观察10个通知的提醒。发现其中会有一两个通知并没有按照我设定的时间唤醒设备,而是会和与他时间相近的下一个预约同时出现(也就是发生了时间不精确的问题)。当时发现这个问题时以为是我在传递预约时间时发生了问题,就打Log查看了一下,发现并没有什么问题,既然时间没有问题,那很有可能是AlarmManager的问题,上网查了一下,在Android的文档中发现了端倪。

官方文档说从API19(android4.4)开始, 为了节能省电(减少系统唤醒和电池使用)。使用Alarm.set()和Alarm.setRepeating()已经不保证精确性(是不是突然一下就蒙了,不精确还怎么用?),不过Google怎么可能会做出这样不合理的设计呢!接着看就会发现其实Google还提供两个精确的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值