正常使用的代码是这样的:

private void createAlarm(String message, int hour, int minutes){

AlarmManager alarmManager = (AlarmManager)

getSystemService(Service.ALARM_SERVICE);

//设置定时发送广播的PendingIntent

Intent intent = new Intent(this, ClockReceiver.class);

Bundle bundle = new Bundle();

bundle.putString("text",message);

intent.putExtras(bundle);

PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);

//设置当前时间

Calendar c = Calendar.getInstance();

c.setTimeInMillis(System.currentTimeMillis());

// 根据用户选择的时间来设置Calendar对象

c.set(Calendar.HOUR_OF_DAY, hour);

c.set(Calendar.MINUTE, minutes);

c.set(Calendar.SECOND,0);

c.set(Calendar.MILLISECOND, 0);

// 设置AlarmManager在Calendar对应的时间发送广播

alarmManager.cancel(pi);

alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);

}

这样使用是没毛病的。

但是问题在于,你 接连 定时两个广播发送的话。就是两个广播的发送时间间距较短。问题就出现。

尽管你给定时器设置了新的 PendingIntent ,然而它只会以你 第一次 设置的 PendingIntent 来发送广播。

拿我上面的代码做例子。

我两次传入不同的 message 来调用 createAlarm()。如果设置的两次定时的时间间隔较短。那么我的广播会两次收到第一个 message。

解决方法

在于这一行代码

PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);

这里的 PendingIntent.getBroadcast() 第二个参数,必须不同。定时器才会设置两个不同 PendingIntent

标签:set,记录,AlarmManager,intent,设置,Android,Calendar,PendingIntent

来源: https://blog.csdn.net/weixin_42619856/article/details/104671892

android 定时器 坑,Android 记录一个使用AlarmManager的坑。相关推荐

  1. 记录一个C++多线程的坑

    记录一个C++多线程的坑 VS2019报错 解决方案: 错误代码 修改方案: 写在最后,发牢骚 VS2019报错 1>C:\Program Files (x86)\Microsoft Visua ...

  2. android 定时器倒计时,Android CountDownTimer实现定时器和倒计时效果

    本文实例为大家分享了Android实现定时器和倒计时的具体代码,供大家参考,具体内容如下 直接上代码,相信都看得懂. Android已经帮封装好了一个类,只不过很多人不知道而已. 代码: public ...

  3. android定时器取消,Android定时器崩溃取消

    我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款.Android定时器崩溃取消 然后我想要做的是点击一个按钮,然后创建一个电子邮件.除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃 ...

  4. android 定时器重置,Android定时器延迟和重置

    我确定在这里的某处有类似的问题,但我似乎无法找到它.Android定时器延迟和重置 这是我正在尝试做的. 假设我已连接到服务器,并且如果在过去5分钟内没有用户拨打任何电话,我想断开连接.但是,如果连一 ...

  5. android+定时器+动画,Android 实现定时器的四种方式总结及实现实例_Android_脚本之家...

    Android中实现定时器的四种方式 第一种方式利用Timer和TimerTask 1.继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(ta ...

  6. android 定时器 耗电,Android定时器

    CountDownTimer new CountDownTimer(3000, 1000) { public void onTick(long millisUntilFinished) { if (m ...

  7. Parcelable的用法及记录一个Parcelable遇到的坑

    大家都知道2个Act之前传递对象数据,一般就是用Serializable或者Parcelable了,好处我就不说了,肯定是Parcelable好用就对了 先看下数据对象 public class Pe ...

  8. 记录一个自己挖的坑~

    这个是在AC_DOCUMENT里做了调整. 后来一个程序批到的时候发现,抬头文本丢了. 然后我就开始debug看了看,发现是这个增强里影响了. 然后就 顺手加了两句话 过了几天,发现了个尴尬的问题.如 ...

  9. java 记录一个类加载顺序的坑

    看看这个,先想想结果打印的顺序和a.b的值 public class ClassLoderTest {public static void main(String[] args) {staticFun ...

最新文章

  1. Scala可变数组和不可变数组之间相互转换
  2. 【java--反射】注解(反射解析注解+注解应用)
  3. python算法与数据结构-快速排序算法
  4. 【转】指针和引用的区别
  5. HTML页面显示缩略所有空格为一格的方法
  6. Windows Phone开发(11):常用控件(下)
  7. attention机制中的注意力图怎么画_注意力机制 | 图卷积多跳注意力机制 | Direct multihop Attention based GNN...
  8. mongodb的安装与简单操作
  9. 阿里云成为MariaDB基金会白金会员 全球唯一入选云计算公司
  10. Netgear业务交换机被曝15个漏洞,有些不修复
  11. .Net MVC框架 + WCF 搭建 集群开发
  12. 阶段3 1.Mybatis_11.Mybatis的缓存_1 今日课程安排
  13. 开发者拒绝写技术博客的常见理由
  14. 一文搞懂天使轮、A轮、B轮、C轮、D轮融资
  15. vue项目中,使用mint-ui的picker实现省市区三级联动,并且编辑时选中默认值(封装成独立的组件)
  16. 用Java写一个简易五子棋游戏
  17. 差分GPS接收机定位原理
  18. HihoCoder上网络流算法题目建模总结
  19. 基于QT的简陋视频播放器
  20. ZooKeeper基础知识笔记(含3节点伪分布式安装配置流程)

热门文章

  1. c++ primer note
  2. Linux C++ STL用法介绍(1)
  3. HQL (五) 外置命名查询(sql语句单独保存起来)
  4. CALayer 简单的使用
  5. SilverLight学习笔记--关于Silverlight资源文件(如:图片)的放置位置及其引用
  6. webClient请求JAVA超时解决方案
  7. CryptographicException异常处理方法
  8. Python常见问题解决记录1-Non-ASCII character ‘\xe7‘错误
  9. 【实践】微博多尺度序列推荐算法实践.pdf(附下载链接)
  10. 解读千人千面,洞悉数据智能的价值(附ppt下载链接)