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);
        该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。

三个方法各个参数:
(1)int type:闹钟的类型,常用的有5个值:

[java]  view plain copy print ?
  1. AlarmManager.ELAPSED_REALTIME
  2. AlarmManager.ELAPSED_REALTIME_WAKEUP
  3. AlarmManager.RTC
  4. AlarmManager.RTC_WAKEUP
  5. 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)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。

Android定时器AlarmManager就说这么多

参见下面的代码:

[java]  view plain copy print ?
  1. AlarmManager am = null;
  2. am = (AlarmManager) context.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  3. for (int i = 0; i < 10; i ++) {
  4. ...
  5. Intent i = new Intent("xxx");
  6. PendingIntent sender = PendingIntent.getBroadcast(context.getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
  7. ...
  8. am.setRepeating(...);
  9. }

采用这种做法后面的定时器会将前面的定时器"覆盖"掉,只会启动最后一个定时器

解决办法

PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags);

第二个参数requestCode一定要是唯一的,比如不同的ID之类的,(如果系统需要多个定时器的话)。

十分感谢论坛的ultrapro大侠

AlarmManager详细的使用参见这位大侠的博客 http://blog.csdn.net/jeethongfei/article/details/6767826

转载于:https://my.oschina.net/tingzi/blog/171267

Android设置多个定时器时只有最后一个定时器有效的问题相关推荐

  1. Android设置TextView点击时变换颜色(内有无效果解决方案)

    设置TextView的点击时变色 1.写好TextView <TextViewandroid:layout_width="wrap_content"android:layou ...

  2. 编程android控制休眠时间,Android设置锁屏/休眠时长

    这个有两个方式: 一种是直接使用api修改: 另一种是修改系统数据库: 调用api需要添加权限,而修改数据库不用. 1.api设置 Settings.System.putInt(getContentR ...

  3. Android设置锁屏/休眠时长

    这个有两个方式: 一种是直接使用api修改: 另一种是修改系统数据库: 调用api需要添加权限,而修改数据库不用. 1.api设置 Settings.System.putInt(getContentR ...

  4. android canvas drawrect画图,为什么在android中调用canvas.drawRect时只绘制一个矩形?

    我正在尝试使用foreach循环为ArrayList中的每个字符串绘制一个矩形,但它似乎只绘制了最后一个矩形. 我看过类似的问题,但他们遇到的问题包括矩形底部高于顶部并调用drawPaint - 但我 ...

  5. linux内核定时器 详解,Linux系统内核定时器机制详解(下)

    7.6.3.4 把一个定时器插入到链表中 函数add_timer()用来把参数timer指针所指向的定时器插入到一个合适的定时器链表中.它首先调用timer_pending()函数判断所指定的定时器是 ...

  6. Android AlarmManager设置多个定时事件时只最后一个有效问题解决

    最近用到了AlarmManager,遇到了问题,当我设置多个定时器时,发现只有一个起作用,百思不得其解,后来在网上找到了原因,把人家的解决办法贴上: AlarmManager的常用方法有三个: (1) ...

  7. android 两种实现计时器时分秒的实现,把时间放在你的手中~

    可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲 ...

  8. android 设置键盘弹出动画,Android实现键盘弹出界面上移的实现思路

    1.首先说一下思路: 基本就是结合layout中ScrollView视图和AndroidManifest.xml中activity中的android:windowSoftInputMode属性配置实现 ...

  9. 从源码角度看Android系统Launcher在开机时的启动过程

    Launcher是Android所有应用的入口,用来显示系统中已经安装的应用程序图标. Launcher本身也是一个App,一个提供桌面显示的App,但它与普通App有如下不同: Launcher是所 ...

最新文章

  1. 菜鸟成长之路05/06/07
  2. Java学习笔记(九)--数组及Arrays类
  3. Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)
  4. STM32开发 -- Keil使用(2)
  5. BINDER SECCTX PATCH ANALYSIS
  6. 如何最大限度提升虚拟内存性能(组图)
  7. ka3525_如何使用KA Lite投放教育内容
  8. 焦虑症患者,整天心神不宁,忧心忡忡怎么办?
  9. Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
  10. pycharm中plt.show()不显示图像的解决办法
  11. vivox6Android版本,vivo x6有几个版本?vivo x6各版本区别对比评测
  12. flex blazeds java spring_flex+blazeds+java+spring后台消息推送
  13. IDEA社区版安装与概述
  14. 实现旋转六面体(含动画的基本介绍)
  15. Java中notify和notifyAll的区别 - 何时以及如何使用
  16. 打开计算机无法关闭窗口,电脑中“打开或关闭Windows功能”窗口出错无法显示怎么解决...
  17. 【停课不停学】CSDN学院奉绵薄之力,为程序员做点公益!
  18. 设计分享 | STM32F103RCT6定时器定时中断原理
  19. java 做日历_java编程实现日历
  20. System.Diagnostics.Debug和System.Diagnostics.Trace

热门文章

  1. 狂赚 1227 亿!腾讯员工 2020 年人均年薪 81 万;小米员工人均年薪 45 万
  2. 壕!阿里开工红包惊人,最高 1000 万,有人却只收到一杯白开水
  3. 开发微信小程序,100 万开发者都离不开它
  4. 数据结构7.5_有向无环图及其应用
  5. [译]Selenium Python文档:一、安装
  6. Android组件化打造知乎日报系列(一)—— 项目架构搭建
  7. Spark Troubleshooting - Task not serializable问题分析
  8. 吴恩达Coursera机器学习 - Chapter 4 多变量线性回归
  9. python项目开发:ftp server开发
  10. zabbix3.0安装