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。

时间: 2024-10-11 21:24:35

AlarmManager与PendingIntent的相关文章

AlarmManager、PendingIntent的使用附件Home监听十分钟后再度启动应用取消服务

AlarmManager.PendingIntent的使用\附件Home监听十分钟后再次启动应用取消服务 AlarmManager.PaddingIntent的使用\ \附件Home监听十分钟后再次启动应用取消服务 对应AlarmManage有一个AlarmManagerServie服务程 序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在系统中,linux实现的设备名 为”/dev/alarm”),并且一直监听闹铃设备,一旦有闹铃

定时任务,AlarmManager使用

项目需要:实现一个定时提醒的功能 查阅资料知道,需要使用AlarmManager AlarmManager介绍: AlarmManager是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作.在使用In

使用AlarmManager实现Android应用每天定时执行任务

介绍 android官方文档:AlarmManager 在Android平台,除了使用AlarmManger外,还可以使用Timer或者Handler来实现定时任务,但这两种方式定时并不会太准确:因此如果我们需要实现精准定时任务,使用AlarmManger更为合理. AlarmManager类提供对系统闹钟服务(或称为定时器服务)的访问接口,使用它既可以指定单次执行的定时任务,也可以指定重复运行的任务. 当闹钟指定触发时间到达时,实际上是系统发出为这个闹钟注册的广播,因此我们需要实现一个针对特定

Android提供的系统服务之--AlarmManager(闹钟服务)

Android提供的系统服务之--AlarmManager(闹钟服务) --转载请注明出处:coder-pig 本节引言: 本节主要介绍的是Android系统服务中的---AlarmManager(闹钟服务), 除了开发手机闹钟外,更多的时候是作为一个全局的定时器,通常与Service 结合,在特定时间启动其他的组件!本节就来对这个AlarmManager来进行解析 同时通过小闹钟与自动换壁纸来演示这个AlarmManager的用法,好了,开始本节的 内容吧! 本节正文: 1.概念与相关属性方法

AlarmManager 用法

AlarmManager 可以按照”预先设定的时间“或”时间间隔"激活Intent的一种方式,他与timer不同的是,他是程序之外的,生命周期不受程序控制,即使程序关闭也会触发.它比Service和定时器更加节省资源.如果在应用程序内触发定时操作,推荐Handler,Timer以及Thread等方式.因为这样Android能更好的控制系统资源. 一.代码 public class MainActivity extends Activity { Button btn1,btn2; AlarmMan

Android系统服务

概述 本篇博文主要介绍的是Android中的Java服务. 这部分服务大部分都有一个Manager类,其实就是一个RPC调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到system_server进程中对应的xxxManagerService中对应的方法,并将结果再通过binder带回. 常用的有如下几个: PowerManagerService –> PowerManager Tables Are PowerManagerService –> PowerManager

Android重复闹钟(每天)的实现

MainActivity如下: package cc.cc; import java.util.Calendar; import java.util.Locale; import android.os.Bundle; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import androi

小米开源便签Notes-源码研究(2)-定时提醒的便签

本篇讲述小米便签中的定时提醒功能.  便签,可以理解为一件事情,一项任务,有个定时提醒的功能,还是蛮不错的~    小米便签定时功能,是当编辑便签的时候,有个菜单项,选了之后,就弹出一个"日期对话框",选择了日期,就设置了定时功能. 下面讲解技术实现的整体思路(很多地方我也不懂,不懂的就搜索):    AndroidManifest.xml配置 <receiver android:name=".ui.AlarmInitReceiver" > <in

android离线下载的相关知识

离线下载的功能点如下:      1.下载管理(开始.取消下载).      2.网络判断(Wi-Fi,3G).      3.独立进程.      4.定时和手机催醒.      5.自启动. 选择离线下载的核心方法 后台独立运行,我们很容易想到服务(Service),但是有以下几种问题 (1)如果服务的进程和应用一致,那么在应用退出后,服务会重启一次 (2)如果服务的进程和应用不一致,进程间的通信就会麻烦一点 (3)如果服务的进程和应用一致,选择IntentService,可以避免重启问题