AlarmManager是android中系统自带的一个提醒服务,比如设置闹钟,做一个定时任务,还可以设置重复操作
AlarmManager中常用的有三个方法:
1、set(int type,long startTime,PendingIntent pi),用于设置一次闹钟。
2、setRepeating(int type,long startTime,long intervalTime,PendingIntent pi),用于设置重复闹钟。
3、setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi),同样是用于设置重复闹钟,但是它是不准确的,相对于第二个方法,也更加节能。
下面就看看这些方法中的参数:
type为闹钟的类型,可分为四个常量:
ELAPSED_REALTIME:闹钟在睡眠状态下不可用,使用的是相对系统启动时间。
ELAPSED_REALTIME_WAKEUP:闹钟在睡眠状态下可用,使用的是相对系统启动时间。
RTC:闹钟在睡眠状态下不可用,使用的是真实时间。
RTC_WAKEUP:闹钟在睡眠状态下可用,使用的是真实时间。
startTime:为开始时间
intervalTime:为重复闹钟的间隔时间,内置了几种:
INTERVAL_FIFTEEN_MINUTES 15分钟
INTERVAL_HALF_HOUR 半个小时
INTERVAL_HOUR 一个小时
INTERVAL_HALF_DAY 半天
INTERVAL_DAY 一天
PendingIntent :广播的一个intent,我们用广播接受闹钟的定时任务,注册一个广播去接受,任务指令。
使用PendingIntent的getBroadcast (Context context, int requestCode, Intent intent, int flags)方法可以得到一个发送广播动作的PendingIntent对象
为以下4个常量或其他支持使用Intent.fillIn()来控制它的变量:
FLAG_CANCEL_CURRENT:如果描述的PendingIntent对象已经存在时,会先取消当前的PendingIntent对象再生成新的。
FLAG_NO_CREATE:如果描述的PendingIntent对象不存在,它会返回null而不是去创建它。
FLAG_ONE_SHOT:创建的PendingIntent对象只使用一次。
FLAG_UPDATE_CURRENT:如果描述的PendingIntent对象存在,则保留它,并将新的PendingIntent对象的数据替换进去。
Intent advAlarmIntent = new Intent(this, AdvBroadcastReceiver.class).setAction('自己设置action');
PendingIntent advBroadcast = PendingIntent.getBroadcast(this, 0, advAlarmIntent, 0);//AdvBroadcastReceiver是我自己的广播,换成你自己的
alarmService.setInexactRepeating(AlarmManager.RTC_WAKEUP, '开始时间', '间隔时间', advBroadcast);//这里设置的重复闹钟
另一个就是在manifest.xml中注册自己的广播
public class AdvBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ('自己设置的action'.equals(action)) {
Log.e("定时任务", "正在下载adv");
}
}
}
这样就可以实现定时任务了,如果要定时任务service启动还可以加上service
网友评论