Most visited

Recently visited

Added in API level 1

AlarmManager

public class AlarmManager
extends Object

java.lang.Object
   ↳ android.app.AlarmManager


该课程提供对系统警报服务的访问。 这些允许您安排您的应用程序在未来的某个时间点运行。 当警报关闭时,已注册的Intent由系统广播,如果目标应用程序尚未运行,则会自动启动该应用程序。 注册的警报在设备处于睡眠状态时保留(如果在此期间关闭设备,可以选择将设备唤醒),但如果设备关闭并重新启动,则会被清除。

只要警报接收器的onReceive()方法正在执行,警报管理器就会保持一个CPU唤醒锁。 这可以保证手机在您完成广播处理之前不会睡眠。 一旦onReceive()返回,警报管理器就释放这个唤醒锁。 这意味着只要您的onReceive()方法完成,手机会在某些情况下进入休眠状态。 如果您的报警接收器名为Context.startService() ,则可能是在请求的服务启动之前手机会处于休眠状态。 为了防止这种情况发生,您的BroadcastReceiver和Service需要实施一个单独的唤醒锁定策略,以确保手机继续运行,直到服务可用。

注意:警报管理器适用于希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。 对于正常的定时操作(滴答,超时等),使用Handler更容易,效率Handler

注意:从API 19( KITKAT )开始,报警传送并不精确:操作系统将切换报警以最大限度地减少唤醒和电池使用。 有新的API支持需要严格交付保证的应用程序; setWindow(int, long, long, PendingIntent)setExact(int, long, PendingIntent) targetSdkVersion早于API 19的应用程序将继续看到之前的行为,即所有报警均在请求时准确传送。

你不直接实例化这个类; 相反,通过Context.getSystemService(Context.ALARM_SERVICE)检索它。

Summary

Nested classes

class AlarmManager.AlarmClockInfo

定时“闹钟”事件的不可变描述。

interface AlarmManager.OnAlarmListener

直接通知警报:请求者必须从警报设置时间到交付时间连续运行,否则交付将失败。

Constants

String ACTION_NEXT_ALARM_CLOCK_CHANGED

广播动作:在 getNextAlarmClock()返回的值发生变化后发送。

int ELAPSED_REALTIME

闹钟时间 SystemClock.elapsedRealtime() (启动后的时间,包括睡眠时间)。

int ELAPSED_REALTIME_WAKEUP

SystemClock.elapsedRealtime()闹钟时间(启动后的时间,包括睡眠时间),当设备关闭时会唤醒设备。

long INTERVAL_DAY

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用的不精确重复间隔。

long INTERVAL_FIFTEEN_MINUTES

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用重复间隔时间可用。

long INTERVAL_HALF_DAY

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用的不精确重复间隔。

long INTERVAL_HALF_HOUR

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用的不精确重复间隔。

long INTERVAL_HOUR

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用的 setInexactRepeating(int, long, long, PendingIntent)重复间隔。

int RTC

System.currentTimeMillis()闹钟时间(以UTC表示的挂钟时间)。

int RTC_WAKEUP

System.currentTimeMillis()闹钟时间(以UTC表示的挂钟时间),当设备关闭时会唤醒设备。

Public methods

void cancel(PendingIntent operation)

使用匹配的 Intent删除任何警报。

void cancel(AlarmManager.OnAlarmListener listener)

删除预定发送给给定的 AlarmManager.OnAlarmListener任何闹钟。

AlarmManager.AlarmClockInfo getNextAlarmClock()

获取有关当前计划的下一个闹钟的信息。

void set(int type, long triggerAtMillis, PendingIntent operation)

安排闹钟。

void set(int type, long triggerAtMillis, String tag, AlarmManager.OnAlarmListener listener, Handler targetHandler)

直接回调版本 set(int, long, PendingIntent)

void setAlarmClock(AlarmManager.AlarmClockInfo info, PendingIntent operation)

安排代表闹钟的闹钟。

void setAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)

set(int, long, PendingIntent)一样,但即使系统处于低功耗空闲模式,也会允许执行此警报。

void setExact(int type, long triggerAtMillis, PendingIntent operation)

安排警报在规定的时间准确发送。

void setExact(int type, long triggerAtMillis, String tag, AlarmManager.OnAlarmListener listener, Handler targetHandler)

直接回调版本 setExact(int, long, PendingIntent)

void setExactAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)

setExact(int, long, PendingIntent)一样,但即使系统处于低功耗空闲模式,也会允许执行此警报。

void setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)

安排具有不精确触发时间要求的重复警报; 例如,每小时重复一次的警报,但不一定每小时都重复一次。

void setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)

安排重复报警。

void setTime(long millis)

设置系统挂钟时间。

void setTimeZone(String timeZone)

设置系统的永久默认时区。

void setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation)

安排警报在给定的时间范围内发送。

void setWindow(int type, long windowStartMillis, long windowLengthMillis, String tag, AlarmManager.OnAlarmListener listener, Handler targetHandler)

直接回调版本 setWindow(int, long, long, PendingIntent)

Inherited methods

From class java.lang.Object

Constants

ACTION_NEXT_ALARM_CLOCK_CHANGED

Added in API level 21
String ACTION_NEXT_ALARM_CLOCK_CHANGED

广播动作:在 getNextAlarmClock()返回的值发生变化后发送。

这是一个受保护的意图,只能由系统发送。 它只被发送给注册的接收者。

常量值:“android.app.action.NEXT_ALARM_CLOCK_CHANGED”

ELAPSED_REALTIME

Added in API level 1
int ELAPSED_REALTIME

闹钟时间SystemClock.elapsedRealtime() (启动后的时间,包括睡眠时间)。 该警报不会唤醒设备; 如果它在设备睡着的时候熄灭,它将不会在设备下一次唤醒之前交付。

常量值:3(0x00000003)

ELAPSED_REALTIME_WAKEUP

Added in API level 1
int ELAPSED_REALTIME_WAKEUP

SystemClock.elapsedRealtime()闹钟时间(启动后的时间,包括睡眠时间),当设备关闭时会唤醒设备。

常量值:2(0x00000002)

INTERVAL_DAY

Added in API level 3
long INTERVAL_DAY

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用的不精确重复间隔。

常量值:86400000(0x0000000005265c00)

INTERVAL_FIFTEEN_MINUTES

Added in API level 3
long INTERVAL_FIFTEEN_MINUTES

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用重复间隔时间可用。

常量值:900000(0x00000000000dbba0)

INTERVAL_HALF_DAY

Added in API level 3
long INTERVAL_HALF_DAY

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用重复间隔时间可用。

常量值:43200000(0x0000000002932e00)

INTERVAL_HALF_HOUR

Added in API level 3
long INTERVAL_HALF_HOUR

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用的不准确重复间隔。

常量值:1800000(0x00000000001b7740)

INTERVAL_HOUR

Added in API level 3
long INTERVAL_HOUR

在API 19之前的Android上运行时,由 setInexactRepeating(int, long, long, PendingIntent)识别的可用的不精确重复间隔。

常量值:3600000(0x000000000036ee80)

RTC

Added in API level 1
int RTC

System.currentTimeMillis()闹钟时间(以UTC表示的挂钟时间)。 该警报不会唤醒设备; 如果它在设备睡着的时候熄灭,它将不会在设备下一次唤醒之前交付。

常数值:1(0x00000001)

RTC_WAKEUP

Added in API level 1
int RTC_WAKEUP

闹钟时间为 System.currentTimeMillis() (以UTC表示的挂钟时间),当设备关闭时会唤醒设备。

常量值:0(0x00000000)

Public methods

cancel

Added in API level 1
void cancel (PendingIntent operation)

使用匹配的Intent删除任何警报。 任何类型的意图匹配此意图的任何警报(由filterEquals(Intent)定义)将被取消。

Parameters
operation PendingIntent: IntentSender which matches a previously added IntentSender. This parameter must not be null.

也可以看看:

cancel

Added in API level 24
void cancel (AlarmManager.OnAlarmListener listener)

删除预定发送给给定 AlarmManager.OnAlarmListener任何闹钟。

Parameters
listener AlarmManager.OnAlarmListener: OnAlarmListener instance that is the target of a currently-set alarm.

getNextAlarmClock

Added in API level 21
AlarmManager.AlarmClockInfo getNextAlarmClock ()

获取有关当前计划的下一个闹钟的信息。 所考虑的闹钟是由使用setAlarmClock(AlarmManager.AlarmClockInfo, PendingIntent)方法的任何应用程序预定的。

Returns
AlarmManager.AlarmClockInfo An AlarmManager.AlarmClockInfo object describing the next upcoming alarm clock event that will occur. If there are no alarm clock events currently scheduled, this method will return null.

也可以看看:

set

Added in API level 1
void set (int type, 
                long triggerAtMillis, 
                PendingIntent operation)

安排闹钟。 注意:对于定时操作(滴答,超时等),使用Handler会更容易和更高效。 如果已经为同一个IntentSender安排了警报,则先前的警报将首先被取消。

如果规定的触发时间在过去,则会立即触发警报。 如果已计划此意图的警报(两个意图的filterEquals(Intent)filterEquals(Intent)定义),则它将被移除并由此替换。

该警报是通过AndroidManifest.xml文件中的 registerReceiver(BroadcastReceiver, IntentFilter)或<receiver>标签注册到的广播接收器的Intent广播。

报警意图通过一个名为Intent.EXTRA_ALARM_COUNT int类型的数据附加信息来Intent.EXTRA_ALARM_COUNT ,表明有多少过去的报警事件已累积到此意向广播中。 由于手机处于睡眠状态而未能送达的周期性警报可能会在交付时超过一次。

注意:从API 19开始,传递给此方法的触发时间被视为不精确:警报在此时间之前不会传递,但可能会延迟并在一段时间后传递。 操作系统将使用此策略,以便在整个系统中“批量”报警,从而最大限度地减少设备“醒来”并最大限度地减少电池使用的次数。 一般来说,只要计划在未来很长时间内报警,不久的将来计划的报警将不会被延期。

采用新的配料策略,交货订单保证并不像以前那么强大。 如果应用程序设置了多个警报,则这些警报的实际交付订单可能与其请求交付时间的顺序不一致。 如果您的应用程序具有强大的订购需求,则可以使用其他API来获取必要的行为; setWindow(int, long, long, PendingIntent)setExact(int, long, PendingIntent)

targetSdkVersion位于API 19之前的应用程序将继续获得先前的警报行为:所有预定的警报将被视为确切。

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
triggerAtMillis long: time in milliseconds that the alarm should go off, using the appropriate clock (depending on the alarm type).
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

set

Added in API level 24
void set (int type, 
                long triggerAtMillis, 
                String tag, 
                AlarmManager.OnAlarmListener listener, 
                Handler targetHandler)

直接回调版本set(int, long, PendingIntent) 当达到闹钟时间时,不提供待发送的PendingIntent,而是提供此时将调用的AlarmManager.OnAlarmListener实例。

OnAlarmListener的 onAlarm()方法将通过指定的目标处理程序或在应用程序的主 null调用,如果 null作为 targetHandler参数传递。

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
triggerAtMillis long: time in milliseconds that the alarm should go off, using the appropriate clock (depending on the alarm type).
tag String: string describing the alarm, used for logging and battery-use attribution
listener AlarmManager.OnAlarmListener: AlarmManager.OnAlarmListener instance whose onAlarm() method will be called when the alarm time is reached. A given OnAlarmListener instance can only be the target of a single pending alarm, just as a given PendingIntent can only be used with one alarm at a time.
targetHandler Handler: Handler on which to execute the listener's onAlarm() callback, or null to run that callback on the main looper.

setAlarmClock

Added in API level 21
void setAlarmClock (AlarmManager.AlarmClockInfo info, 
                PendingIntent operation)

安排代表闹钟的闹钟。 系统可以选择向用户显示关于该警报的信息。

此方法与 setExact(int, long, PendingIntent) ,但意味着 RTC_WAKEUP

Parameters
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

setAndAllowWhileIdle

Added in API level 23
void setAndAllowWhileIdle (int type, 
                long triggerAtMillis, 
                PendingIntent operation)

set(int, long, PendingIntent)一样,但即使系统处于低功耗空闲模式,也会允许执行此警报。 这种类型的警报只能用于实际需要警报在空闲期间熄灭的情况 - 一个合理的例子是日历通知应该发出声音,以便用户知道它。 当警报发出时,应用程序也会被添加到系统的临时白名单中约10秒钟,以允许该应用程序获取进一步的唤醒锁以完成其工作。

这些警报可能会在空闲时显着影响设备的电源使用(并因此导致应用程序对电池造成严重的电池责任),因此应小心使用它们。 为了减少滥用,对于特定应用程序的这些警报发生频率的限制是有限制的。 在正常的系统操作下,它不会在大约每分钟的时间内发送这些警报(此时每个这样的待处理警报都会发送)。 当处于低功率空闲模式时,这个持续时间可能会明显更长,例如15分钟。

与其他警报不同,系统可以自由地重新安排这种类型的警报,以防止其他警报发生,甚至是来自同一应用程序的警报。 当设备闲置时这会很明显地发生(因为这个闹钟可以在闲置时关闭,当应用程序发出任何其他警报时会保留,直到稍后),但即使不闲置也可能发生。

无论应用程序的目标SDK版本如何,此调用都可以批量处理警报。

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
triggerAtMillis long: time in milliseconds that the alarm should go off, using the appropriate clock (depending on the alarm type).
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

setExact

Added in API level 19
void setExact (int type, 
                long triggerAtMillis, 
                PendingIntent operation)

安排警报在规定的时间准确发送。

此方法与set(int, long, PendingIntent)类似,但不允许操作系统调整交付时间。 警报将尽可能接近要求的触发时间。

注意:只有精确时间递送强烈需求的闹钟(例如在请求时间响闹的闹钟)才应该被安排。 强烈建议应用程序不要使用精确警报,因为它们会降低操作系统将电池使用量降至最低的能力。

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
triggerAtMillis long: time in milliseconds that the alarm should go off, using the appropriate clock (depending on the alarm type).
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

setExact

Added in API level 24
void setExact (int type, 
                long triggerAtMillis, 
                String tag, 
                AlarmManager.OnAlarmListener listener, 
                Handler targetHandler)

直接回调版本setExact(int, long, PendingIntent) 当达到闹钟时间时,不提供待发送的PendingIntent,而是提供此时将调用的AlarmManager.OnAlarmListener实例。

OnAlarmListener的 onAlarm()方法将通过指定的目标处理程序或在应用程序的主 null调用,如果 null作为 targetHandler参数传递。

Parameters
type int
triggerAtMillis long
tag String
listener AlarmManager.OnAlarmListener
targetHandler Handler

setExactAndAllowWhileIdle

Added in API level 23
void setExactAndAllowWhileIdle (int type, 
                long triggerAtMillis, 
                PendingIntent operation)

setExact(int, long, PendingIntent)一样,但即使系统处于低功耗空闲模式,也会允许执行此警报。 如果您不需要确切的闹钟时间表,但仍然需要在空闲时执行,请考虑使用setAndAllowWhileIdle(int, long, PendingIntent) 这种类型的警报只能用于实际需要警报在空闲期间熄灭的情况 - 一个合理的例子是日历通知应该发出声音,以便用户知道它。 当警报发出时,应用程序也会被添加到系统的临时白名单中约10秒钟,以允许该应用程序获取进一步的唤醒锁以完成其工作。

这些警报可能会在空闲时显着影响设备的电源使用(并因此导致应用程序对电池造成严重的电池责任),因此应小心使用它们。 为了减少滥用,对于特定应用程序的这些警报发生频率的限制是有限制的。 在正常的系统操作下,它不会在大约每分钟的时间内发送这些警报(此时每个这样的待处理警报都会发送)。 当处于低功率空闲模式时,这个持续时间可能会明显更长,例如15分钟。

与其他警报不同,系统可以自由地重新安排这种类型的警报,以防止其他警报发生,甚至是来自同一应用程序的警报。 当设备闲置时这会很明显地发生(因为这个闹钟可以在闲置时关闭,当应用程序发出任何其他警报时会保留,直到稍后),但即使不闲置也可能发生。 请注意,由于应用程序选择了这种行为,操作系统将允许自己比安排正确的警报更具灵活性来安排这些警报。 当设备空闲时,为了优化电池寿命,可能需要调度更多的自由度。

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
triggerAtMillis long: time in milliseconds that the alarm should go off, using the appropriate clock (depending on the alarm type).
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

setInexactRepeating

Added in API level 3
void setInexactRepeating (int type, 
                long triggerAtMillis, 
                long intervalMillis, 
                PendingIntent operation)

安排具有不精确触发时间要求的重复警报; 例如,每小时重复一次的警报,但不一定每小时都重复一次。 这些警报比传统上由setRepeating(int, long, long, PendingIntent)提供的严格重现setRepeating(int, long, long, PendingIntent) ,因为系统可以调整警报的交付时间以使其同时触发,避免超过必要的从睡眠状态唤醒设备。

警报的第一个触发不会在请求的时间之前,但在此之后的几乎整个时间间隔内可能不会发生。 另外,虽然重复报警的整个周期将按照要求进行,但报警的任何两次连续发射之间的时间可能会有所不同。 如果您的应用需要非常低的抖动,请改用适当窗口的一次性警报。 setWindow(int, long, long, PendingIntent)setExact(int, long, PendingIntent)

从API 19开始,所有重复警报都是不准确的。 由于此方法自API 3以来已可用,因此您的应用程序可以安全地调用它并确保它在当前版本和旧版本的Android上都会得到类似的行为。

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
triggerAtMillis long: time in milliseconds that the alarm should first go off, using the appropriate clock (depending on the alarm type). This is inexact: the alarm will not fire before this time, but there may be a delay of almost an entire alarm interval before the first invocation of the alarm.
intervalMillis long: interval in milliseconds between subsequent repeats of the alarm. Prior to API 19, if this is one of INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_HALF_DAY, or INTERVAL_DAY then the alarm will be phase-aligned with other alarms to reduce the number of wakeups. Otherwise, the alarm will be set as though the application had called setRepeating(int, long, long, PendingIntent). As of API 19, all repeating alarms will be inexact and subject to batching with other alarms regardless of their stated repeat interval.
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

setRepeating

Added in API level 1
void setRepeating (int type, 
                long triggerAtMillis, 
                long intervalMillis, 
                PendingIntent operation)

安排重复报警。 注意:对于定时操作(滴答,超时等),使用Handler更容易,效率Handler 如果已经为同一个IntentSender安排了闹钟,它将首先被取消。

set(int, long, PendingIntent)一样,除了您还可以提供闹钟自动重复的时间段。 该警报继续重复,直到cancel(AlarmManager.OnAlarmListener)明确删除。 如果规定的触发时间在过去,则警报将立即触发,并且警报计数取决于过去触发时间相对于重复间隔的距离。

如果警报延迟(例如,通过系统休眠,对于非_WAKEUP警报类型),将尽快传送跳过的重复。 之后,将来的报警将按照原始时间表发送; 他们不会随着时间漂移。 例如,如果您在每小时的顶部设置了重复闹钟,但手机在7:45至8:45之间睡着了,手机一旦唤醒就会发出闹钟,然后下一次闹钟将以9:00。

如果您的应用程序希望允许交付时间漂移以确保警报之间至少经过一段特定的时间间隔,则采取的方法是使用一次性警报,在处理每个警报传递时安排下一个警报。

注意:从API 19开始,所有重复警报都是不准确的。 如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,如上所述每次重新安排时间。 传统应用程序的targetSdkVersion比API 19早,它们将继续拥有所有警报,包括重复警报,并将其视为确切对待。

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
triggerAtMillis long: time in milliseconds that the alarm should first go off, using the appropriate clock (depending on the alarm type).
intervalMillis long: interval in milliseconds between subsequent repeats of the alarm.
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

setTime

Added in API level 8
void setTime (long millis)

设置系统挂钟时间。 需要权限android.permission.SET_TIME。

Parameters
millis long: time in milliseconds since the Epoch

setTimeZone

Added in API level 1
void setTimeZone (String timeZone)

设置系统的永久默认时区。 这是所有应用的时区,即使重启后也是如此。 如果您只是想更改应用程序中的时区,则可以使用setDefault(TimeZone) ,即使这样,仍然希望将明确的TimeZone传递给需要它的API,而不是更改所有线程的时区。

在android M及更高版本中,将非Olson时区传递给此函数是错误的。 请注意,对于所有Android版本,这是一个糟糕的主意,因为POSIX和TimeZone类在相同的非Olson ID中具有相反的解释'+''-'

Parameters
timeZone String: one of the Olson ids from the list returned by getAvailableIDs()

setWindow

Added in API level 19
void setWindow (int type, 
                long windowStartMillis, 
                long windowLengthMillis, 
                PendingIntent operation)

安排警报在给定的时间范围内发送。 此方法类似于set(int, long, PendingIntent) ,但允许应用程序精确控制操作系统可能调整其传送的程度。 这种方法允许应用程序利用交付批量产生的电池优化,即使它对警报具有适度的及时性要求。

此方法还可用于通过确保为每个警报请求的窗口不相交来实现多个警报之间的严格排序保证。

如果不需要精确交货,则应用程序应使用标准set(int, long, PendingIntent)方法。 这将为OS提供最大的灵活性,以最大限度地减少唤醒和电池使用。 对于必须在精确指定的时间内交付并且没有可接受的变化的警报,应用程序可以使用setExact(int, long, PendingIntent)

Parameters
type int: One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, or RTC_WAKEUP.
windowStartMillis long: The earliest time, in milliseconds, that the alarm should be delivered, expressed in the appropriate clock's units (depending on the alarm type).
windowLengthMillis long: 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.
operation PendingIntent: Action to perform when the alarm goes off; typically comes from IntentSender.getBroadcast().

也可以看看:

setWindow

Added in API level 24
void setWindow (int type, 
                long windowStartMillis, 
                long windowLengthMillis, 
                String tag, 
                AlarmManager.OnAlarmListener listener, 
                Handler targetHandler)

直接回调版本setWindow(int, long, long, PendingIntent) 当达到闹钟时间时,不提供待发送的PendingIntent,而是提供此时将调用的AlarmManager.OnAlarmListener实例。

如果 null作为 targetHandler参数传递, targetHandler通过指定的目标处理程序或在应用程序的主 null调用OnAlarmListener onAlarm()方法。

Parameters
type int
windowStartMillis long
windowLengthMillis long
tag String
listener AlarmManager.OnAlarmListener
targetHandler Handler

Hooray!