AlarmManagerService 时钟对齐

AlarmManager方法

setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);<br> 该方法用于设置重复闹钟,第1个参数表示闹钟类型,第2个参数表示闹钟首次执行时间,第3个参数表示闹钟两次执行的间隔时间,第4个参数表示执行的动作

绝对时间代表 SystemClock.elapsedRealtime() 相对时间代表 System.currentTimeMillis()

闹钟的类型

AlarmManager.ELAPSED_REALTIME <br> 使用相对时间,在手机睡眠状态下不可用

AlarmManager.ELAPSED_REALTIME_WAKEUP<br> 使用相对时间,在睡眠状态下会唤醒系统并执行提示功能

AlarmManager.RTC<br> 使用绝对时间,在睡眠状态下不可用

AlarmManager.RTC_WAKEUP<br> 使用绝对时间,在睡眠状态下会唤醒系统并执行提示功能

AlarmManager.POWER_OFF_WAKEUP<br> 使用绝对时间,在手机关机状态下也能正常进行提示

时钟对齐原理

比如有3个应用,QQ,微信,陌陌

QQ 每隔5s 就需要向服务器请求数据<br> 微信 每隔7s 就需要向服务器请求数据<br> 陌陌 每隔9s 就需要向服务器请求数据<br>

也就是系统在30s之内,就需要唤醒系统13次

了解时钟对齐<br>

比如我们设定系统每隔3s唤醒一次<br> 对齐后时间 = 3 + (重复时间 - (重复时间 % 3))<br> 系统在30s之内,只需要唤醒系统10次<br> 比如时间间隔设为每隔10s唤醒一次<br> 系统在30s之内,只需要唤醒系统3次<br>

而时钟对齐则可以减少系统唤醒次数,达到省电的目的。<br>

AlarmManagerService 时钟对齐 修改setRepeating 方法

long startTime

<!-- lang: java -->
long lstartTime = startTime;
long l1 = paramLong % 5000L;
if (l1!=0L){
    lstartTime = 5000L+ (lstartTime - l1);
}

long intervalTime

<!-- lang: java -->
long l1 = 0L, l2 = 0L;
if (type== 2) {
    l1 = System.currentTimeMillis() - SystemClock.elapsedRealtime();
} else {
    l1 = 0L;
}
l2 = (intervalTime+ l1) % 5000L;
if (l2 != 0L) {
    lintervalTime= 5000L+ (intervalTime- l2);
}

setRepeating 方法

<!-- lang: java -->
synchronized (this.mLock)
{
  Alarm localAlarm = new Alarm();
  localAlarm.type = paramInt;
  localAlarm.when = lstartTime;
  localAlarm.repeatInterval = lintervalTime;
  localAlarm.operation = paramPendingIntent;
  removeLocked(paramPendingIntent);
  if (addAlarmLocked(localAlarm) == 0)
    setLocked(localAlarm);
  return;
}

转载于:https://my.oschina.net/oldmou/blog/131513

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值