Android AlarmManager类

1. AlarmManager介绍类

AlarmManager提供广播服务,使用PendingIntent调用Intent服务。

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

PendingIntent用于延迟的Intent,主要通过三种方式获取

// 启动Activity
public static PendingIntent getActivity(Context context, int requestCode,
        Intent intent, @Flags int flags)

// 启动Service
public static PendingIntent getService(Context context, int requestCode,
        @NonNull Intent intent, @Flags int flags)

// 发送广播
public static PendingIntent getBroadcast(Context context, int requestCode,
        Intent intent, @Flags int flags)

PendingIntentflags

  • FLAG_CANCEL_CURRENT:如果当前系统中已经存在相同的PendingIntent对象,那么取消原有的,重新生成一个PendingIntent对象。
  • FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null
  • FLAG_ONE_SHOT:该PendingIntent只作用一次。在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回SendIntentException
  • FLAG_UPDATE_CURRENT:如果系统中有一个和你描述的PendingIntent对等的PendingInent,那么系统将使用该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras

判断两个相同的PendingIntent对象,主要是依据requestCodeintent.filterEquals(Intent)是否相同。

Intent intentA = new Intent();
intentA.putExtra("paramA", "paramA");
Intent intentB = new Intent();
intentB.putExtra("paramB", "paramB");
// intentA.filterEquals(intentB) 返回true;

2. AlarmManager的常用方法

设置闹钟

  • set(int type,long triggerAtMillis,PendingIntent operation),设置一次性闹钟,在某个时间执行闹钟
  • setRepeating(int type,long triggerAtMillis,long intervalMillis,PendingIntent operation),设置重复闹钟
  • setExact(int type, long triggerAtMillis, PendingIntent operation),设置一次性闹钟比set方法设置的精度更高
  • setInexactRepeating(int type, long triggerAtMillis,long intervalMillis, PendingIntent operation),设置一个非精确的周期性任务
  • cancel(PendingIntent operation),取消闹钟

type是闹钟类型

  • AlarmManager.ELAPSED_REALTIME,该状态下闹钟使用相对时间(系统启动时间),手机睡眠状态下不可用
  • AlarmManager.ELAPSED_REALTIME_WAKEUP,该状态下闹钟使用相对时间,在睡眠状态下会唤醒系统并执行提示功能
  • AlarmManager.RTC,该状态下闹钟使用绝对时间(系统当前时间),手机睡眠状态下不可用
  • AlarmManager.RTC_WAKEUP,该状态下闹钟使用绝对时间,在睡眠状态下会唤醒系统并执行提示功能

triggerAtMillis是触发时间,以毫秒为单位

  • 如果type使用的是相对时间(ELAPSED_REALTIMEELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(SystemClock.elapsedRealtime())。
  • 如果type使用的是绝对时间(RTCRTC_WAKEUPPOWER_OFF_WAKEUP),那么本属性就得使用绝对时间(System.currentTimeMillis())。

intervalMillis是两次闹钟的时间间隔,也是以毫秒为单位。

operation绑定了闹钟的执行动作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值