Alarm Controller演示如何在Android应用中使用Alarm事件,其功能和java.util.Timer ,TimerTask类似。但Alarm可以即使 当前应用退出后也可以做到Schedule一个任务在指定的时刻执行。
AlarmManager 用于管理Alarm事件,支持单次执行或 重复执行。 和大都数Android服务一样,AlarmManager也是通过getSystemService来获取服务对象:
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
与TimerTask对应的任务描述类型为PendingIntent, PendingIntent描述了将要执行的Intent,PendingIntent没有提供构造函数,需要通过static 函数getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, int, Intent, int) 来或得想要执行的 Activity,Broadcast,Service描述。
本例中是取得对Broadcast OneShotAlarm 和RepeatingAlarm的描述,分别对应于 单次执行时执行的Broadcast事件和多次执行时Broadcast事件,它们在AndroidManifest.xml定义为Broadcast Receiver:
<receiver android:name=”.app.OneShotAlarm” android:process=”:remote” />
<receiver android:name=”.app.RepeatingAlarm” android:process=”:remote” />
Schedule单次Alarm事件代码如下:
Intent intent = new Intent(AlarmController.this, OneShotAlarm.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this, 0, intent, 0); // We want the alarm to go off 30 seconds from now. Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 30); // Schedule the alarm! AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
其中sender为对发给Broadcast Receiver OneShotAlarm的Intent的描述,当到达指定的时间(例子中为30秒),AlarmManager将给OneShotAlarm发出一 个Broadcast Intent,OneShotAlarm接到后,将使用Toast在屏幕上显示一个消息。 如果你多次点击“One Shot Alarm”并不会 Schedule多个Alarm事件,这是因为Schedule同一个Sender对象,后一次将取消上此Scheduled的事件。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索alarmmanager
, 事件
, intent
, settimeinmillis()
, broadcast
, pendingintent
, alarm
事件执行多次
apidemos、android apidemos、api demos、apidemos下载、android api demos,以便于您获取更多的相关知识。