AlarmManager与PendingIntent

1.AlarmManager的作用与PendingIntent的关系

顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作。在使用Intent的时候,我们还需要在执行startActivity、startService或sendBroadcast才能使Intent有用。而PendingIntent的话就是将这个动作包含在内了。

(AlarmManager实际作用不仅仅作为闹钟,实际上它是一个全局的计时器,可以在指定时间或指定周期内执行某个组件)

问:不是可以使用Handler的sendMessageDelayed()或者postDelayed()来定时吗?

当当前应用被关闭的时候,进程就会停止,则Handler的消息也会消亡。但AlarmManger是系统服务,不会消亡。所以是最好定时的方法

2.PendingIntent的作用及使用

Intent与PendingIntent的区别:

Intent 是及时启动,intent 随所在的activity 消失而消失。
Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装

如何创建PendingIntnet:

利用PendingIntent.getService()的方法
public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags)
getService()包含了Context.startService(Intent)方法

四个参数的意义:

Context context:不用说了
int requestCode:区分PendingIntent的请求代码
Intent intent:意图
int flags :一组用来决定如何创建PendingIntent的标识符

flags参数:

FLAG_UPDATE_CURRENT: 最经常使用的是FLAG_UPDATE_CURRENT,如果PendingIntent已经存在,保留它并且只替换它的extra数据。

FLAG_CANCEL_CURRENT:如果PendingIntent已经存在,那么当前的PendingIntent会取消掉,然后产生一个新的PendingIntent。你可用使用它去检索新的Intent,如果你只是想改变Intent中的额外数据的话。通过取消先前的Intent,可用确保只有最新的实体可用启动它。如果这一保证不是问题,考虑flag_update_current。

FLAG_NO_CREATE:利用FLAG_NO_CREAT获取的PendingIntent,若描述的Intent不存在则返回NULL值.

LAG_ONE_SHOT:利用 FLAG_ONE_SHOT获取的PendingIntent只能使用一次,即使再次利用上面三个方法重新获取,再使用PendingIntent也将失败。

上面4个flag中最经常使用的是FLAG_UPDATE_CURRENT,因为描述的Intent有 更新的时候需要用到这个flag去更新你的描述,否则组件在下次事件发生或时间到达的时候extras永远是第一次Intent的extras。
使用 FLAG_CANCEL_CURRENT也能做到更新extras,只不过是先把前面的extras清除,另外FLAG_CANCEL_CURRENT和 FLAG_UPDATE_CURRENT的区别在于能否新new一个Intent,FLAG_UPDATE_CURRENT能够新new一个 Intent,而FLAG_CANCEL_CURRENT则不能,只能使用第一次的Intent。

取消PendingIntent:

pend.cancel();

3.AlarmManager的使用 (http://blog.csdn.net/wangxingwu_314/article/details/8060312)

步骤一:创建一个定时器

//获取AlarmManager:
AlarmManager am = (AlarmManager)context.getSystem.Service(Context.ALARM_SERVICE);

步骤二:启动定时器

//启动定时器:
    am.setRepeating(AlarmManager.RTC,System.currentTimeMillis(),延迟时间,pending);

步骤三:取消定时器

//取消定时器:
    am.cancel(pendingIntent);
//记得释放pendIntent:
    pendingIntent.cancel();

总结:AlarmManager:简单的说就是设置定时器的开始时间和循环间隔时间,启动pending。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AlarmManager 是 Android 系统中的一个重要类,用于在特定时间触发操作。要设置每日任务,你可以使用 AlarmManager 结合 PendingIntent 和 Calendar 类来实现。 下面是一个简单的示例代码,演示如何使用 AlarmManager 设置每日任务: ```java // 获取 AlarmManager 实例 AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); // 创建一个 PendingIntent,用于指定触发时要执行的操作 Intent intent = new Intent(this, YourBroadcastReceiver.class); // 替换为你自定义的 BroadcastReceiver 类 PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); // 获取当前时间,并设置每天任务触发的时间 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, hour); // 替换为你希望触发的小时 calendar.set(Calendar.MINUTE, minute); // 替换为你希望触发的分钟 // 设置每天重复触发的时间间隔(这里设置为 24 小时) long intervalMillis = 24 * 60 * 60 * 1000; // 设置重复触发的任务 alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), intervalMillis, pendingIntent); ``` 在上面的代码中,首先获取 AlarmManager 实例。然后创建一个 PendingIntent,用于指定触发时要执行的操作(例如广播接收器)。接下来,获取当前时间,并使用 Calendar 类设置每天任务触发的时间。最后,使用 setRepeating() 方法设置重复触发的任务,指定触发时间、重复间隔和 PendingIntent。 请注意,以上示例中的 YourBroadcastReceiver 类需要你自己定义,用于接收触发任务时的广播,并执行相应操作。 希望以上内容能对你有所帮助!如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值