功耗问题研究——定时唤醒机制实际效果

在Android 7.0系统中,Handler和Message在深度休眠后无法执行,但系统常因来电等事件短暂唤醒。对于需定时交互的应用,可利用定时唤醒机制。步骤包括自定义广播、定义接收器和使用AlarmManager API。实测AlarmManager.setInexactRepeating虽大部分按设定间隔唤醒,但偶尔会有偏差。
摘要由CSDN通过智能技术生成

实验设备android版本:7.0

android开发的小伙伴们使用频度最高的Handler和Message,在系统进入深度休眠之后,是无法正确执行的,因此有些时候小伙伴们可能会疑惑为什么我明明由Handler发出了一个定时任务(Message或Runnable),但为什么没有执行呢?

但是过度的担心休眠问题,而全程持有wacklock,也是没有必要的。因为实际情况下,系统有很多机会被唤醒,比如来电、短信、网络状态变更、网络侧过来了数据包等等,只不过需要注意的是,这样的唤醒有可能是短暂的(系统可能很快再次睡下去),如果你有耗时的操作,那么你需要在这样的唤醒节点申请wacklock,并在耗时操作执行完毕后,释放掉wacklock,这样才能确保代码的正确执行。

对于需要与后台保持长连接心跳或者其他定时周期性主动交互的程序,那么可能需要用到系统的定时唤醒机制。通常安卓系统定时唤醒机制的参考打开方式,分以下三步:

1、自定义广播

Intent intent_alarm = new Intent("com.tgt.device.manager.RTC_WAKEUP");

2、定义该广播的接收器(由于这里采用了指定发送的方式,因此该receiver并不需要声明IntentFilter)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值