Android的AlarmManager服务

来源:互联网 发布:广告公司用到的软件 编辑:程序博客网 时间:2024/05/22 08:21

有很多时候我们可能想在应用里加入一些定时触发的事件功能,这个时候我们可以使用安卓系统的一个服务——AlarmManager来处理,他的使用还算比较简单明了,先用context.getSystemService(Context.ALARM_SERVICE)得到这个Service,然后就可以使用他的一些静态方法了。主要的有——

public void set (int type, long triggerAtMillis, PendingIntent operation)
这个方法从Android4.4以后默认是设置的非准确时间,也就是会比设置的时间晚那么一点点触发,这么改是为了节省电量,建议在对时间要求不是极精确的情况都用这个。

这里type有这么几种——

ELAPSED_REALTIME,一般用 SystemClock.elapsedRealtime() 获得,表示从开机到现在过去了多少毫秒(包括手机睡眠的时间);

RTC,一般用System.currentTimeMillis()获得,表示的是UTC的时间啦;

还有两个和他们相对应的——

ELAPSED_REALTIME_WAKEUP,RTC_WAKEUP,这两个和前边两个type不同之处在于这两种类型的闹钟任务在睡眠中也会触发,触发后会将系统从睡眠中唤醒,而前两种就不行了,如果前两种到了点时手机休眠着,那只有等用户唤醒或其他事件把他唤醒时任务才会执行。

第二个参数嘛,是说在何时触发,这个参数与第一个参数有关系。如果type选的是realtime,这里就要用SystemClock.elapsedRealtime()来作参考时间点,要是用RTC,就用System.currentTimeMillis(),或者是calendar.getTimeInMillis()。

说到这个我想补充个触发原则,很重要哦!即——如果设定的时间比当前时间早,会立刻触发。

第三个参数是一个PendingIntent,就是一个将给系统来执行的Intent,一般用PendingIntent.getActivity(....),PendingIntent.getService(....),PendingIntent.getBroadCast(...)生成,系统在执行时会相应PendingIntent类型来执行startActivity,startService,sendBroadcast。要注意的是,如果设置闹钟时两个PendingIntent一样,则后一个设置会覆盖前一个设置

知道了这个,剩下的几个方法就大同小异了。

setExact(int type, long triggerAtMillis, PendingIntent operation)
这个是Android4.4以上用的,当对时间精确要求高时可以用这个。

public void setRepeating (int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
这个和set不同之处是它首次触发后会每隔intervalMillis这么长时间就会重复触发,直到cancel为止。

cancel(PendingIntent operation)
这个很直观,就是把一个已经设定的闹钟任务取消掉。

setTime(long millis)、

这个是设定系统时间(UTC)
注意啦,如果你用用这个,必须在manifest里声明要权限permission.SET_TIME,不然程序就不鸟你。

还有几个方法比较不常用且不常见,我就不提啦~



0 0