PendingIntent和AlarmManager--------启动定时任务及详解

AlarmManager 定时任务详解 android 是怎么通过AlarmManager调度定时任务;AlarmManager 与 Timer ,Hander的区别;以及在不同android版本,怎么解决AlarmManager 不准问题 阅读详情

pendingintent使用的三种情况

你可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统取得一个用于启动一个Activity的PendingIntent对象,

可以通过getService(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于启动一个Service的PendingIntent对象

可以通过getBroadcast(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于向BroadcastReceiver的Intent广播的PendingIntent对象

 

pendingIntent的第4个参数

FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。

FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。

FLAG_ONE_SHOT:该PendingIntent只作用一次。在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException。

FLAG_UPDATE_CURRENT:如果系统中有一个和你描述的PendingIntent对等的PendingInent,那么系统将使用该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。

 

AlarmManger启动定时任务,其常用的方法

(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);
        该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。 有点类似JAVA的Timer里面schedule(TimerTask task, Date firstTime, long period):根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。在长期运行中,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。

(4)cancel(PendingIntent operation)
       取消一个设置的闹钟

(5)setTimeZone(String timeZone)
       设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限

注解:使用alarmManager启动service时,用service的action(service在manifest中声明多个action)来启动,防止用service.class导致pendingintent相互覆盖影响的情况!重要!

Android Service,AlarmManager组合实现定时任务踩的坑 做项目时遇到一个场景:app需要定时访问后台,感知获取登录用户有没有最新的消息。我采用了定义一个Service,在onStartCommand()方法中请求后台获取最新消息,接着创建一个AlarmManager来延时发送广播,再定义一个广播接收器,接收到一个广播后,接收器触发startService( ),这时service的onStartCommand再次被触发...代码如下:.. 阅读详情

相关推荐

Android AlarmManager详解:原理、API与最佳实践

定时任务调度是移动开发中的基础需求,Android系统通过AlarmManager提供跨进程的定时触发能力。其核心原理是基于系统级时钟服务,能够在应用进程不存活时仍保证任务执行,特别适合闹钟、定时提醒等场景。从技术实现看,AlarmManager通过PendingIntent机制实现任务封装,支持RTC_WAKEUP等四种触发类型,并随着Android版本演进不断优化电池管理策略。在Android 12及以上版本中,精确alarm需要特殊权限声明,这反映了系统对电源管理的重视。实际开发中,开发者需要平衡定时

weixin_34146805的博客 514

Android PendingIntent和AlarmManager启动定时任务

为什么80%的码农都做不了架构师?>>> ...

weixin_34043301的博客 448

Android 中使用 AlarmManager 结合 Intent 和 PendingIntent 进行编程

PendingIntent 是 Intent 的包装类,它允许我们在稍后的时间点执行 Intent,而不是立即执行。PendingIntent 可以在特定的时间触发 Intent,例如在未来的某个时间点或者在指定的间隔内重复执行。通过结合这些组件的使用,我们可以实现各种定时任务和延迟操作的需求,从而更好地控制和调度任务的执行。在上面的代码中,我们创建了一个继承自 BroadcastReceiver 的类 MyBroadcastReceiver,并重写了其中的 onReceive() 方法。

TechGlide的博客 257

Android中PendingIntent的使用

在上面的代码中,我们创建了一个启动TargetActivity的PendingIntent,并指定了requestCode为0,标志位为PendingIntent.FLAG\_UPDATE\_CURRENT。这样,当我们调用pendingIntent.send()方法时,系统会自动启动TargetActivity。

xiaokangss的博客 1951

RK3568平台开发系列讲解(安卓篇)AlarmManager使用说明

Timer,有一个明显的问题,它并不太适合用于需要长期在后台运行的定时任务。我们都知道,为了能让电池更加耐用,每种手机都会有自己的休眠策略,Android手机就会在长时间不操作的情况下自动让CPU进入睡眠状态,这就有可能导致Timer中的定时任务无法正常运行。

内核笔记 3273

使用R语言(ggplot2)绘制KEGG信号通路富集气泡图

本文详细介绍了如何使用R语言的ggplot2包绘制KEGG信号通路富集气泡图,从数据预处理到高级定制技巧,帮助生物信息学研究者直观展示富集分析结果。文章涵盖了气泡图的核心绘制方法、布局优化、常见问题解决方案以及交互式可视化扩展,是进行KEGG富集分析可视化的实用指南。

weixin_42625070的博客 447

Android开发之AlarmManager的使用(开启Activity、开启服务、开启广播)

Android开发之AlarmManager的使用(开启Activity、开启服务、开启广播) 近来做项目,需要在固定的时间间隔内开启一次广播,本人立马想到了Alarmmanager,在此就科普下,描述下本人的实现过程吧! 1. AlarmManager,是Android中常用的一种系统级别的提示服务   使用AlarmManager可为我们在特定的时刻为我们广播一个指定

FlyingSnow2211的博客 5321

从BIN文件到可烧录程序:深入理解ADI DSP程序读取背后的原理与安全边界

本文深入探讨了ADI DSP程序从BIN文件到可烧录程序的转换原理与安全边界,详细解析了JTAG接口、仿真器工作流程及Flash存储结构。通过Visual DSP++工具,开发者可以理解程序读取的底层机制,同时强调了知识产权保护的重要性,为嵌入式开发提供了实用建议。

weixin_27956639的博客 263

AlarmManager与PendingIntent

1.AlarmManager的作用与PendingIntent的关系 顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Inten...

dianqu7487的博客 279

Unity技能系统核心:从理论到实践构建可扩展的Buff管理器

本文深入探讨了Unity游戏开发中构建可扩展技能系统的核心——Buff管理器。通过剖析三层架构(数据、逻辑、渲染)与独立组件管理模式,提供了从Buff数据定义、管理器核心实现到可视化编辑器搭建的完整实践方案,旨在解决技能系统维护难题,提升开发效率与代码质量。

weixin_29002209的博客 253

OpenClaw实战系列02:企业微信接入完全指南

本文详细介绍了如何将OpenClaw与企业微信对接,实现智能机器人功能。主要内容包括:企业微信侧创建智能机器人或自建应用,获取必要凭证和权限;OpenClaw侧安装配置企业微信插件,设置通信通道;完成双向验证并进行功能测试。文章提供了详细的配置步骤、常见问题排查方法和进阶玩法,帮助用户在30分钟内完成对接。关键点包括:确保URL可访问、Token一致、网关正常运行,以及针对不同部署环境(云服务器/内网)的配置差异。

PeterPan的博客 3811

Android开发之定时任务的创建

android.content.Context Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to appli

I am Grooter... 685

pytorch搭建SSAE实现预测分类代码模板完整代码

pytorch搭建SSAE实现预测分类代码模板完整代码

323

Android PendingIntent与AlarmManager

有不明之处或者本文有错误地方请大方的提出来,转载请注明来源:http://blog.youkuaiyun.com/geekerparadise/article/details/7787729 一、   PendingIntent: PendingIntent,顾名思义,是一个延迟意图,也就是说这个意图不确定发出时间,Pendingintent相当于包装了Intent。 通过以下函数中intent的描

GeekerParadise的专栏 1282

电磁兼容(EMC)整改案例(七):EFT测试失败都是IC悬空引脚惹的祸

无论任何时候,为了避免这些问题,通常建议对悬空的IO口进行适当的配置,比如设置为强推挽输出低电平、输入带上拉或下拉电阻等,以减少外部电路对IO管脚状态的影响,并提高系统的稳定性和可靠性.

linkking27的博客 1032

数学建模学习(78):多输入多输出回归预测模型(结合XGBoost实现)

多输入多输出回归预测问题求解

全栈川川 8130

利用pendingintent 和AlarmManager实现定时任务的一些分析

PendingIntent 获取 PendingIntent对象的方法: 可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统取得一个用于启动一个Activity的PendingIntent对象,可以通过getService(Context context, int requestCo

1780

ESP32-C3入门教程 WiFi篇①——WiFi Scan 扫描附近AP无线热点 | 堵塞等待扫描结果,回调事件通知扫描结果

文章目录一、快速运行二、运行效果三、程序流畅四、关键函数4.1 扫描所有有效的AP4.2 获取上次扫描中找到的AP列表4.3 获取上次扫描中找到的AP数 一、快速运行 示例项目中,选择WiFi—>scan menuconfig配置ESP32C3-Specific—>Rec 0 芯片选择ESP32-C3(Built-in USB JTAG) 快速运行ESP-IDF Build, Flash and Monitor(左下角) 二、运行效果 三、程序流畅 esp_netif_init,初始

5417

PendingIntent AlarmManager

转载来源:http://blog.youkuaiyun.com/geekerparadise/article/details/7787729 一、   PendingIntent: PendingIntent,顾名思义,是一个延迟意图,也就是说这个意图不确定发出时间,Pendingintent相当于包装了Intent。 通过以下函数中intent的描述可以启动一个Activity、Broadcast、S

jileshijiedejike的专栏 402

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android后台执行定时任务(保活)&&使用AlarmManager的各种坑

最近有个需求,需要在android手机后台一直执行一个任务,有一定的时间间隔。 目前方案有以下几种 方式一:采用Handler的postDelayed(Runnable, long)方法 handler = new Handler(); runnable = new Runnable() { @Override public void run() ...

u013095264的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android开发之定时任务(AlarmManager、WorkManager)

Android 程序的定时任务主要有AlarmManager、WorkManager两种。 1、 AlarmManager,会使设备从低电耗模式中唤醒。因此,它在电源和资源管理方面来讲并不高效。AlarmManager 仅适合用于精确闹钟或通知(例如日历活动)场景,而不适用于后台工作。 2、 WorkManager,使用更加简单,适用于更加复杂的场景,兼容性更好

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 1万+

Android定时任务实现:AlarmManager详解与优化

在Android开发中,定时任务是实现后台调度的核心技术之一。其核心原理是通过系统服务在指定时间触发预定操作,涉及进程唤醒、电池优化等底层机制。从技术价值看,精准的定时能力对闹钟、提醒类应用至关重要,同时需要平衡性能与功耗。AlarmManager作为系统级解决方案,支持设备休眠唤醒和精确触发,适用于需要高可靠性的场景。实际开发中,开发者需要处理Doze模式适配、厂商ROM差异等挑战,并通过批量处理、及时取消等优化手段提升性能。本文以AlarmManager为重点,对比分析了Handler、WorkMana

weixin_34216107的博客 437

android alarmmanager定时任务,AlarmManager 定时任务详解

功能说明 设置一个在未来的某个时间运行应用的PendingIntent 或者OnAlarmListener 即使设备已经进入睡眠已设置的闹铃也会被保持 只有当设备关闭或是重启的时候会被清除AlarmManager 对象获取//AlarmManager 系统服务的获取方式AlarmManager alarmManager (AlarmManager) getSystemService(Context...

weixin_39921689的博客 1122

Android 使用AlarmManager实现每日定时任务触发

一、需求: 最近遇到一个需求,需要每天早上5:00触发执行一个任务,类似闹铃提醒,使用AlarmManager来实现。 二:实现 AlarmManager的基本使用大家可参考后面的文章,写的非常详细,在实现的过程中主要对闹钟的类型,及相应的triggerTime(也有starttime)设置花了点时间研究了下。 1、闹钟的类型 AlarmManager.RTC_WAKEUP 表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,即当前系统时间,状态值为0; AlarmManager

孔小乐的博客 8394

Android AlarmManager实现定时任务(也就是闹钟) 附Demo源码

创建定时任务 Android中的定时任务一般有两种实现方式,一种是使用 Java API 里提供的 Timer 类,一种是使用 Android 的 Alarm 机制。这两种方式在多数情况下都能实现类似的效果,但 Timer 有一个明显的短板,它并不适用于那些需要长期在后台运行的定时任务。我们都知道,为了能让电池更加耐用,每种手机都会有自己的休眠策略,Android 手机就会在长时间不操作的情况下自...

Ghlerrix的博客 4284

Android知识点 120 —— AlarmManager

目录 1 概述 2 为什么要有AlarmManager 3 闹铃类型 4 AlarmManager的常用方法 4.1 设置时间 4.2 设置闹铃 4.2.1 set 4.2.2 setExact 4.3 取消闹铃 4.4 获得下一次闹铃事件 5 常用时间定义 6 1 概述 AlarmManager类提供对系统警报服务的访问。这些允许您安排应用程序在将来...

编程到管理、技术到产品 2142
上一篇: AndroidLinux--------指令集
下一篇: Java Executors(线程池)
有志青年L
博客等级 码龄10年 30粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值