Android AlarmManager学习
来源:互联网 发布:mac电源灯不亮无法充电 编辑:程序博客网 时间:2024/05/17 20:53
一、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_WAKEUPYES可以与RTC相同RTCYES不可以使用绝对时间
可以通过调用 System.currentTimeMillis()获得ELAPSED_REALTIME_WAKEUPYES可以与ELAPSED_REALTIME相同ELAPSED_REALTIMEYES不可以使用相对时间(是从系统启动后开始计时的,包括睡眠时间)
可以通过调用SystemClock.elapsedRealtime()获得POWER_OFF_WAKEUPYES
可以通过调用 System.currentTimeMillis()获得ELAPSED_REALTIME_WAKEUPYES可以与ELAPSED_REALTIME相同ELAPSED_REALTIMEYES不可以使用相对时间(是从系统启动后开始计时的,包括睡眠时间)
可以通过调用SystemClock.elapsedRealtime()获得POWER_OFF_WAKEUPYES
可以
设备在关机状态下也可以唤醒系统,
是一种关机闹铃
与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权限
设置一个新的闹铃
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
AlarmManager的使用 - 使用BroadcastRecevier的例子
Android AlarmManager实现不间断轮询服务 - 使用Service的例子
ApiDemo中也有例子
六、参考资料
AlarmManager官方文档
深入学习android之AlarmManager
linux实现的设备名为”/dev/alarm”,AlarmManager与AlarmManagerServie之间是通过Binder来通信的,他们之间是多对一的关系。
2014-07-23 更新
0 0
- Android AlarmManager学习
- Android之AlarmManager学习
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- android学习笔记之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- Android学习之AlarmManager使用
- Android 中AlarmManager学习笔记(2)
- webview的input输入框获取焦点弹出数字键盘
- 云概念下,虚拟主机该何去何从
- gamekit开篇
- Ext,chrome 前端访问互联网接口问题
- linux 学习心得(纯新手)
- Android AlarmManager学习
- linux下多个jdk版本并存切换
- WebDriver中页面滚动(scrolling)
- 关于序列的“最”系列
- Hibernate初体验
- 自己的第一份总结
- android 添加一个音频
- 前端开发必备 40款优秀CSS代码编写工具推荐
- NoSQL数据库:Redis内存使用优化与存储