Alarm
Alarm 介绍
- Alarm是一种在预先确定时间或时间间隔内激活Intent的方式,和Timmer不同,Alarm是在应用程序之外操作的,所以即使应用程序关闭,也能用来激活应用程序事件或者操作,这个和静态注册广播一样。
- Alarm可以结合BroadCast Receiver一起使用,允许设置能够激活广播Intent,启动Service,甚至启动Activity的Alarm,而不需要打开或者运行应用程序。
- Android中的Alarm在设备处于休眠状态到时候依旧保持活动状态,可以有选择地设置Alarm来唤醒设备,但是无论何时,重启设备,所有的Alarm都会被取消。
- 可以使用Alarm实现基于网络查找的定时更新,或者把费时的或者成本受限的操作安排在非高峰期运行,或者对失败的操作调度重试。
Alarm 使用
AlarmManager manager = getSystemService(Context.ALARM_SERVICE)
|
manager.set(type, triggerAtMillis, operation);
|
type类型,可以有如下几种方式:
RTC_WAKEUP:在指定时间唤醒设备,并激活Pending Intent。 RTC :在指定时间点激活Pending Intent但是不会唤醒设备。 ELAPSED_REALTIME:根据设备启动之后经过的时间激活Pending Intent ,但是不会唤醒设备。 ELAPSED_REALTIME_WAKEUP根据设备启动之后经过的时间激活Pending Intent ,并唤醒设备。
|
triggerAtMillis触发时间:
如果把触发时间设置为过去的时间,那么将会被立即触发。
|
要激活的Pending Intent
PendingIntent alarmIntnet =PeddingIntent.getBroadCast(this,0,intent,0);
|
当需要对重复Alarm的精确时间间隔进行细粒度控制的时候,可以使用setRepeating方法,传入这个方法的时间间隔可以用于指定Alarm的确切事件间隔,最多可以精确到毫秒,如下所示:
manager.setRepeating(type, triggerAtMillis, intervalMillis, operation);
|
当需要减少因为定时唤醒设备来执行更新所消耗的电量的时候可以使用setInexactRepeating方法,在运行时,Android会同步多个没有精确指定时间间隔的Alarm到重复Alarm,并同时触发。方法如下:
manager.setInexactRepeating(type, triggerAtMillis, intervalMillis, operation);
|
在使用setInexactRepeating的时候不必为其设置确切的时间,它接收如下的几种Alarm Manager常量。
INTERVAL_FIFTEEN_MINUTES INTERVAL_HALF_HOUR INTERVAL_HOUR INTERVAL_HALF_DAY INTERVAL_DAY
|
manager.cancel(alarmIntnet)
|
Timer与TimerTask
与Alarm不同的是Timer是在应用程序之内操作的,对于只在应用程序生命周期内发生的定时操作,将Handler类和Timmer以及Thread结合起来使用是一种比Alarm更好的方法,因为这样可以允许Android更好地控制系统资源。
Timer timer = new Timer(); TimerTask task = new TimerTask() { public void run() { } };
|
timer.schedule(task, delay, period);
|