第10天 AlarmManager简单整理


一、AlarmManager是什么

可以设置即使系统锁屏休眠之后依然可以存在。

Alarm Manager有个很好的特性就是即使在你的应用程序真正退出或手机休眠时,它仍然起作用。

Alarm Manager发出的消息通过拥有一个CPU唤醒锁,保证即使锁屏的情况下避免手机进入休眠状态,当在手机接收器的onReceive方法中处理完发送的消息后才会释放锁,手机才能进入休眠状态。
但是手机接收器的onReceive方法中调用Context.startService()方法,可能还没执行手机已经休眠,所以需要自己处理这种情况。可以产考PowerManager。

AlarmManager会在Intent中另外携带一个Intent.EXTRA_ALARM_COUNT,以表示对于该Intent已经有多少个Alarm被累计,这里的累计,是指在type为ELAPSED_REALTIME或RTC时,因为设备处于休眠无法激活Alarm,无法发送Intent,从而进行累计.普通情况下该值为1.


AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service.


二、使用场景
1. 在指定时长后执行某项操作
2.周期性的执行某项操作(闹钟、轮循机制)

三、类型

  指定时间发送 当系统进入休眠是否可以唤醒系统 使用时间
RTC_WAKEUP YES 可以 与RTC相同
RTC YES 不可以 使用绝对时间
可以通过调用 System.currentTimeMillis()获得
ELAPSED_REALTIME_WAKEUP YES 可以 与ELAPSED_REALTIME相同
ELAPSED_REALTIME YES 不可以 使用相对时间(是从系统启动后开始计时的,包括睡眠时间)
可以通过调用SystemClock.elapsedRealtime()获得
POWER_OFF_WAKEUP YES
可以
设备在关机状态下也可以唤醒系统,
是一种关机闹铃
与RTC相同


四、支持方法
方法AlarmManager提供的方法: 
void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 
设置一个重复类型的闹钟 
如果之前已经存在会先cancel掉之前的,然后再次启动

void set(int type, long triggerAtTime, PendingIntent operation)
设置一个新的闹铃


void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
设置一个重复闹钟的不精确版本,它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。
内置的几个interval为:
INTERVAL_FIFTEEN_MINUTES
INTERVAL_HALF_HOUR
INTERVAL_HOUR
INTERVAL_HALF_DAY
INTERVAL_DAY
如果你将其设为DAY,那么可能这一天中的所有闹钟都会被合并掉。

void cancel(PendingIntent operation)
取消一个与参数匹配的闹铃

void setTimeZone(String timeZone)
设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限 


五、例子

可以支持Service、BroadcastRecevier、Activity
使用BroadcastRecevier的例子
http://yuanzhifei89.iteye.com/blog/1131523

Service
Android AlarmManager实现不间断轮询服务
http://blog.csdn.net/ryantang03/article/details/9317499

六、参考资料
AlarmManager官方文档


深入学习android之AlarmManager
linux实现的设备名为”/dev/alarm”,AlarmManager与AlarmManagerServie之间是通过Binder来通信的,他们之间是多对一的关系。

第10天 AlarmManager简单整理

上一篇:七 手游开发神器 cocos2d-x editor 之图片字体(LabelBMFont)


下一篇:同一字段多ID存储名称映射