无意间看到Alarm 这个类 觉得挺有意思 这个用法应该会比较常用到 看了一些介绍 然后自己写了一个demo
Alarm是在预定的时间上触发Intent的一种独立的方法。
Alarm超出了应用程序的作用域,所以它们可以用于触发应用程序事件或动作,甚至在应用程序关闭之后,与Broadcast Receiver结合,它们可以变得尤其的强大,可以通过设置Alarm来启动应用程序或者执行动作,而应用程序不需要打开或者处于活跃状态。
举个例子,你可以使用Alarm来实现一个闹钟程序,执行正常的网络查询,或者在“非高峰”时间安排耗时或有代价的操作。
对于仅在应用程序生命周期内发生的定时操作,Handler类与Timer和Thread类的结合是一个更好的选择,它允许Android更好地控制系统资源。
Android中的Alarm在设备处于睡眠模式时仍保持活跃,它可以设置来唤醒设备;然而,所有的Alarm在设备重启时都会被取消。
Alarm的操作通过AlarmManager来处理,通过getSystemService可以获得其系统服务,如下所示:
AlarmManager alarms = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
为了创建一个新的Alarm,使用set方法并指定一个Alarm类型、触发时间和在Alarm触发时要调用的Intent。如果你设定的Alarm发生在过去,那么,它将立即触发。
这里有4种Alarm类型。你的选择将决定你在set方法中传递的时间值代表什么,是特定的时间或者是时间流逝:
❑ RTC_WAKEUP
在指定的时刻(设置Alarm的时候),唤醒设备来触发Intent。
❑ RTC
在一个显式的时间触发Intent,但不唤醒设备。
❑ ELAPSED_REALTIME
从设备启动后,如果流逝的时间达到总时间,那么触发Intent,但不唤醒设备。流逝的时间包括设备睡眠的任何时间。注意一点的是,时间流逝的计算点是自从它最后一次启动算起。
❑ ELAPSED_REALTIME_WAKEUP
从设备启动后,达到流逝的总时间后,如果需要将唤醒设备并触发Intent。
效果图如下:
下面看代码
这里用到了一个类 PendingIntent
pending是挂起的意思 它的功能跟Intent差不多 也是用来进行传递数据 它的内部也有Intent的引用 这里的主要区别还是生命周期
因为Alarm具有了不依赖应用程序的功能,Intent是依赖应用的,所以Intent就不能满足这种需求,
PendingIntent的生命周期,由系统管理,创建他的应用被Kill了,该PendingIntent可以照样存在,在别的进程中照样可以使用
下面就是通过BroadcastReceiver 来接收消息
这里接收到得消息是以通知的方式显示
Notification 就是用来在屏幕顶端显示通知信息的
它主要的功能是创建一个状态条图标、在扩展的状态条窗口中显示额外的信息(和启动一个Intent)、还有声音震动等
提示信息
可以通过Id来取消通知
另外还有一些其他的设置: