AlarmManager的常用方法有三个:
(1)set(int type,long startTime,PendingIntent pi);
        该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。
(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
        该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第四个参数表示闹钟响应动作。类似JAVA的Timer里面scheduleAtFixedRate(TimerTask task, long delay, long period),时间间隔相对比较精确,在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。在长期运行中,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
        该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。类似JAVA的Timer里面schedule(TimerTask task, Date firstTime, long period),以近似固定的时间间隔(由指定的周期分隔)进行后续执行。在固定速率执行中,根据已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。从长远来看,执行的频率将正好是指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
 
三个方法各个参数:
(1)int type:闹钟的类型,常用的有5个值: 
[java] 
AlarmManager.ELAPSED_REALTIME 
AlarmManager.ELAPSED_REALTIME_WAKEUP 
AlarmManager.RTC 
AlarmManager.RTC_WAKEUP 
AlarmManager.POWER_OFF_WAKEUP

AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
        AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;
        AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;
        AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;
        AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;

(2)long startTime:
        闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,
        如果第一个参数对应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();
        如果第一个参数对应的闹钟使用的是绝对时间(RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示为:System.currentTimeMillis()。

(3)long intervalTime:
        对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。

(4)PendingIntent pi:
        是闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。
 
AlarmManager使用示例:利用用户自定义广播实现闹钟功能,从当前时间开始,每隔10分钟提示一次
(1)实现原理:在SendActivity.java中定义一个AlarmManager对象,指定该对象从当前时间开始,每隔10分钟向名为“MYALARMRECEIVER”的广播接收器发出一条广播,附加消息内容为“你该打酱油了”;创建一个名为MyReceiver的广播接收器,在其onReceive方法中获取Intent对象传过来的值(“你该打酱油了”)并用一个Toast组件显示出来;在 AndroidManifest.xml文件中注册SendActivity类和广播接收器类MyReceiver,设置MyReceiver的action的值为“MYALARMRECEIVER”

Android中的定时器AlarmManager相关推荐

  1. 基于Android中实现定时器的3种解决方法

    在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法 二.采用Handler的postDelayed(Runnable, long)方法 三 ...

  2. android 计时器工具类,Android中通用定时器--好用的工具

    package com.utility.common; import android.os.Handler; import android.os.Message; public class BaseT ...

  3. AndroidStudio_在android中使用定时器_异步定时实现心跳保活功能---Android原生开发工作笔记231

    其实就是定时去给服务器,发送心跳,给服务器提供简单的监控功能. 这里不能简单的用Timer实现,会出现阻塞的情况,要使用timer和Handler结合的方式 实现在不影响界面的情况下,异步发送心跳. ...

  4. android全局计时_Android中使用定时器的三种方法

    本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第 ...

  5. android alarmmanager进程,Android中使用AlarmManager需注意设置进程属性

    Android中使用AlarmManager需注意设置进程属性 在Android中,AlarmManager提供了不受休眠状态的系统定时功能,其一般使用方法如下. 1.创建一个BroadcastRec ...

  6. Android开发笔记(五十)定时器AlarmManager

    Timer和TimerTask Java中的定时器机制有现成的方案,就是Timer+TimerTask.其中TimerTask用来描述时刻到达后的事务处理,而Timer用来调度定时任务,如何时启动.间 ...

  7. Android中定时器实现的方式对比

    在android中经常需要定时循环执行某一段代码,大家首先想到的是Timer,在一般的场合下,Timer和TimerTask可以完全胜任,但是在有些情况下,Timer就不能很好的完成定时循环任务,如与 ...

  8. android 定时器使用的比较,Android中几种定时器的总结和比较

    在android中,一般有下面几种方式实现定时任务: 采用Handler与线程的sleep(long)方法 采用Handler的postDelayed(Runnable, long)方法 采用Hand ...

  9. android:catation=quot;90quot;,Android中的AlarmManager的使用.htm

    var protocol = window.location.protocol; document.write(' Android中的AlarmManager的使用 - wangxingwu_314的 ...

最新文章

  1. 白盒测试的5种逻辑覆盖法
  2. 2019 ICPC Asia Nanjing Regional K.Triangle(求一个能将三角形分成两个面积相同的线段、计算几何)
  3. 互联网产品各阶段的标准流程文档
  4. 实战SSM_O2O商铺_35【商品】商品编辑之View层的实现
  5. Spring MVC注释
  6. python怎么改目录_如何查看文件,而不是使用Python进行更改的目录?
  7. 读书笔记011:《伤寒论》- 手厥阴心包经
  8. iphone字体_iPhone 适合老人盘吗?
  9. 当前不会命中断点_原神:体验服新角色胡桃,0命就能起飞,难道是策划良心发现了?...
  10. 《Python爬虫开发与项目实战》——1.6 小结
  11. ajax请求参数为中文乱码的情况
  12. linux下overcommit_memory的问题
  13. UE4移动平台上基于物理的着色
  14. Python基本操作(四) 循环与判断
  15. Python实战技术 - Python虚拟隔离环境 和 Docker技术
  16. 解决clipboard手机端无法复制的一种思路
  17. 你是如何抵制百度系列产品的?
  18. kbmmw 的HTTPSmartService中的跨域访问
  19. 【Java 微信公众号开发】① 介绍、测试号、接入
  20. 存储程序式计算机特征,冯.诺依曼机模型是以运算器为中心的存储程序式的计算机模型,它由五大部分构成,即运算器、控制器、存储器、输入设备和输出设备...

热门文章

  1. java获取id值_从另一页获取ID值[重复]
  2. vue 分享微信传参_vue 中使用微信分享接口(简单实用)
  3. mysql repalication_mysql replication(主从复制)(一)MS模式
  4. C#调用C/C++动态库Dll时几个注意事项:PInvoke错误
  5. labview曲线上两点画延长线_教你用直尺画各种几何图形
  6. CentOS 8中安装Docker出现和Podman冲突
  7. 阿里云平台注册与使用Linux
  8. HALCON标定助手使用实例
  9. linux+cp+吃内存怎么办,Linux吃掉了我的内存
  10. with(nolock)的用法