一、声明:public class AlarmManager extends Object
java.lang.Object | |
? | android.app.AlarmManager |
只要广播的onReceive()方法正在执行,这闹钟管理者(AlarmManager)会持有一个CPU唤醒锁,这是为了保证手机不会休眠直到处理完该广播,一旦onReceive()返回,那么闹钟管理者将会释放唤醒锁。这意味着你的手机在广播一处理完有可能进入休眠,如果你的闹钟广播接收者调用的是Context.startService(),那么手机有可能在被请求的服务执行之前进入休眠,为了防止这种情况,你的BroadcastReceiver和服务需要实现一个单独的唤醒锁策略以确保手机继续运行,直到服务可用。
注:该类适用于你想让应用程序在将来某个指定时间点执行的情况,即使你的应用程序现在没有运行。对一般的时间操作,使用Handler是更容易和更有效率的。
自API 19以后,闹钟触发是不精确的:操作系统将会使用闹钟时间产生变化,为了减少唤醒和电池使用。有新的API支持那些需要严格闹钟触发时间的应用程序,参见:setWindow(int, long, long, PendingIntent)
and
setExact(int, long, PendingIntent)
.而在API 19以前的版本参照以前的处理方法,他们都是按照请求精确触发的。
四、常量:
1、public static final int ELAPSED_REALTIME 该闹钟时间以SystemClock.elapsedRealtime()定义。闹钟不会唤醒设备。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒。常量值为3。
2、public static final int ELAPSED_REALTIME_WAKEUP 该闹钟时间以SystemClock.elapsedRealtime()定义。当闹钟触发时会唤醒设备。常量值为2。
3、public static final long INTERVAL_DAY
可用的不精确的复发间隔。通过setInexactRepeating(int, long, long, PendingIntent)去辨别。运行在API 19或者之前。常量值:86400000
4、public static final long INTERVAL_FIFTEEN_MINUTES
可用的不精确的复发间隔。通过setInexactRepeating(int, long, long, PendingIntent)去辨别。运行在API 19或者之前。常量值:900000
5、public static final long INTERVAL_HALF_DAY
可用的不精确的复发间隔。通过
setInexactRepeating(int, long, long, PendingIntent)去辨别。运行在API 19或者之前。常量值: 43200000
6、public static final long INTERVAL_HALF_HOUR
可用的不精确的复发间隔。通过setInexactRepeating(int, long, long, PendingIntent)去辨别。运行在API 19或者之前。常量值: 1800000
7、public static final long
INTERVAL_HOUR 可用的不精确的复发间隔。通过
setInexactRepeating(int, long, long, PendingIntent)去辨别。运行在API 19或者之前。常量值: 3600000
8、public static final int
RTC 该时间以System.currentTimeMillis()定义。闹钟不会唤醒设备。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒。常量值为1。
9、public static final int
RTC_WAKEUP 该时间以System.currentTimeMillis()定义。当闹钟触发时会唤醒设备。常量值为0。
五、方法:
1、public void
cancel (PendingIntent operation) 根据匹配的Intent,移除闹钟。Intent封装在operation中。任何类型的闹钟,只要匹配该条件都会被取消。
2、public void
set (int type, long triggerAtMillis, PendingIntent operation) 设置闹钟。
注:对常用时间操作,使用Handler更容易,如果之前设置过同一个IntentSender的闹钟,那么之前的首选会被取消。如果设置的时间在当前时间之前,那么闹钟将马上触发。
参数:type:One of
ELAPSED_REALTIME
, ELAPSED_REALTIME_WAKEUP
, RTC
, or
RTC_WAKEUP
.
3、public void
setExact (int type, long triggerAtMillis, PendingIntent operation) 按照指定时间设置闹钟,类似于
set(int, long, PendingIntent)
,但是该方法不允许操作系统调整触发时间,闹钟会尽可能地在请求时间触发。
注:只有在要求闹钟时间非常精确的情况才使用该方法进行设置。应用程序非常不支持在不必要的情况下使用该方法,因为它会降低操作系统减少电池使用的能力。
4、public void
setInexactRepeating (int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
设置一个重复的闹钟,它的触发时间是不精确的。该方法比setRepeating(int, long, long, PendingIntent)节省电量。因为系统能调整触发时间,避免不必要的唤醒设备。
5、public void setRepeating (int type, long triggerAtMillis, long intervalMillis, PendingIntent operation) 设置重复闹钟。
6、public void setTime (long millis) 设置系统“墙”时钟。需要android.permission.SET_TIME.权限。
7、public void setTimeZone (String timeZone) 设置系统默认时区,要求android.permission.SET_TIME_ZONE.权限。
参数:由TimeZone支持。
8、public void setWindow
(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation) 设置一个闹钟在给定的时间窗触发。类似于set(int, long, PendingIntent)
,该方法允许应用程序精确地控制操作系统调整闹钟触发时间的程度。
参数:
windowStartMillis | The earliest time, in milliseconds, that the alarm should be delivered, expressed in the appropriate clock‘s units (depending on the alarm type). |
---|---|
windowLengthMillis | The length of the requested delivery window, in milliseconds. The alarm will be delivered no later than this many milliseconds after
windowStartMillis . Note that this parameter is a duration, not the timestamp of the end of the window. |