首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于使用AlarmManager注意事项

快过年了,更新春节前最后一篇博客。 最近在做一个需求:客户端按照规定时间间隔向服务端发送定位。一看到这个需求就想到了使用 AlarmManager 来实现。...其实答案非常简单,相对于 Handler 来说,使用 sendEmptyMessageDelayed 方法是依赖于 Handler 所在线程,如果线程结束,就起不到定时任务效果; AlarmManager...至于 Timer 可以精确地做到定时操作,但是相比于 AlarmManager 而言还是差了一截。同理,如果手机关屏后长时间使用, CPU 就会进入休眠模式。...所以如果设置为 AlarmManager.RTC_WAKEUP ,那么可以通过修改手机系统时间来提前触发定时事件。...你会发现在 Android 4.4 及以上版本定时任务不是按照规定时间间隔来执行。比如你设置了每隔 3 分钟发出一个 HTTP 请求,结果你一看莫名其妙地变成了隔 5 分钟发一次

1.6K20

【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )

该操作耗电量非常大 ; AlarmManager 可以一定程度上替代上述 WeakLock , 并且可以稳定每隔一段时间唤醒 CPU , 避免了 CPU 全程唤醒情况 , 同时也降低了耗电量 ; 一...、AlarmManager 简介 ---- AlarmManager 简介 : ① 激活时间 : AlarmManager 可以脱离于应用生命周期限制 , 每隔一段时间 , 定期执行任务 ; 即使应用没有执行..., 或者手机处于休眠状态 , 也可以触发执行操作 ; ② 间隔设定 : 开发者可以设定触发任务执行周期 , 该任务一般是通过发送延迟意图 PendingIntent 实现 ; ③ 广播接收者 : 一般使用..., 使用 AlarmManager 每隔一段时间 , 唤醒一次 , 执行任务 , 然后继续休眠 , 可以极大降低资源消耗 ; 二、使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作...(ALARM_SERVICE); // 设置闹钟管理器每隔 50 秒发送一次延迟意图 mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,

1K00
您找到你想要的搜索结果了吗?
是的
没有找到

笔记58 | Android闹钟

调度重复闹钟 闹钟(基于AlarmManager类)给予你一种在应用使用期之外执行与时间相关操作方法。你可以使用闹钟初始化一个长时间操作,例如每天开启一次后台服务,下载当日天气预报。...尽量让你闹钟频率最小; 如果不是必要情况,不要唤醒设备(这一点与闹钟类型有关,本节课后续部分会提到); 触发闹钟时间不必过度精确; 尽量使用 setInexactRepeating()方法替代...如果触发时间是过去某个时间点,闹钟会立即被触发; 闹钟间隔时间。例如,一天一次,每小时一次,每五秒一次,等等; 在闹钟被触发时才被发出Pending Intent。...如果你只是简单希望闹钟在一个特定时间间隔被激活(例如每半小时一次),那么你可以使用任意一种 ELAPSED_REALTIME类型闹钟,通常这会是一个更好选择。...对于另一些实时性要求较高应用——例如,闹钟需要精确地在上午8点半被激活,并且自此之后每隔1小时激活一次——那么可以使用 setRepeating()。不过你应该尽量避免使用精确闹钟。

1.6K30

Android闹钟机制实现定时任务功能

, 这里设为1分钟闹一次,在第2步我们将每隔1分钟收到一次广播 //int interval = 60 * 1000; //am.setRepeating(AlarmManager.RTC_WAKEUP...后来我发现问题出在第二个参数上 我对他理解是错误 我之前以为它是“延迟”时间实际它是“启动”时间。...如果使用RTC_WAKEUP类型 应该调用System.currentTimeMillis()获取从1970.1.1号以来时间在加上你设定延迟时间 alarmManager.set(AlarmManager.RTC_WAKEUP...triggerAtTime:第1次运行时要等待时间,也就是执行延迟时间,单位是毫秒。 interval:表示执行时间间隔,单位是毫秒。...但与Intent不同是,PendingIntent可以脱离应用程序存在。 以上就是本文全部内容,希望对大家学习有所帮助。

3.1K30

Android中AlarmManager+Notification实现定时通知提醒功能

不过其两个闹钟执行间隔时间不是固定。它相对而言更省电一些,因为系统可能会将几个差不多闹钟合并为一个来执行,减少设备唤醒次数。...参数详解 type:闹钟类型 ELAPSED_REALTIME:在指定延时过后,发送广播,但不唤醒设备(闹钟在睡眠状态下不可用)。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒。...如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒(闹钟在睡眠状态下不可用)。...long intervalTime:执行时间 闹钟一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。...),那么本属性就得使用绝对时间,比如当前时间就表示为:System.currentTimeMillis() long startTime:间隔时间 对于周期定时方式来说,存在本属性,表示两次闹钟执行间隔时间

6.3K32

美团动态线程池实践思路开源项目(DynamicTp),线程池源码解析及通知告警篇

(可配置)去计算线程池活跃度,达到配置threshold阈值后会触发一次告警,告警间隔内多次触发不会发送告警通知 [675f7b2732ba46ae9a0539ec69698c6b~tplv-k3u1fbpfcp-zoom...-1.image] *** 队列容量告警 容量使用率 = queueSize / queueCapacity 服务启动后会开启一个定时监控任务,每隔一定时间去计算任务队列使用率,达到配置threshold...且判断如果周期累计值达到配置阈值,则会触发一次告警通知(同时重置周期累加值为0及上次告警时间为当前时间),告警间隔内多次触发不会发送告警通知 [651049fe286f4cb099ab8936bfc4b425...且判断如果周期累计值达到配置阈值,则会触发一次告警通知(同时重置周期累加值为0及上次告警时间为当前时间),告警间隔内多次触发不会发送告警通知 @Override public void execute...且判断如果周期累计值达到配置阈值,则会触发一次告警通知(同时重置周期累加值为0及上次告警时间为当前时间),告警间隔内多次触发不会发送告警通知 @Override protected void afterExecute

88571

Android开发笔记(一百六十)休眠模式下定时器控制

并且定时器来源于系统服务,即使App已经不在运行了,也能收到定时器发出广播被唤醒。...原本该方法可指定每隔固定时间就发送定时广播,但在Android4.4之后,操作系统为了节能省电,将会自动调整定时器唤醒时间。...比如原来调用setRepeating方法设定了每隔10秒发送广播,但App在实际运行过程中,很可能过了好几分钟才发送一次广播,这意味着该方法将不再保证每次工作都在开发者设置时间开始。...static int mDelay = 3000;          // 设置定时任务,注意setRepeating时间间隔并不可靠,只能调用set方法间接实现定时     private void...然而休眠模式本意是挂起包括定时任务在内App事务,现在却提供setAndAllowWhileIdle方法留下了后门,为开发者鸡鸣狗盗之事大开方便,如此规定岂不是贻笑大方?

3K20

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

其中TimerTask用来描述时刻到达后事务处理,Timer用来调度定时任务,如何时启动、间隔多久再次运行等等。 Timer调度方法是schedule,主要有三个参数。...第一个参数表示定时器类型,第二个参数表示任务首次执行时间,第三个参数表示再次执行间隔时间,第四个参数表示定时任务。...: 表示定时器即使在睡眠状态下也会启用,此时定时器使用相对时间(相对于系统启动开始) ELAPSED_REALTIME : 表示定时器在睡眠状态下不可用,此时定时器使用相对时间 因为AlarmManager...启动标志,具体取值说明如下: FLAG_ONE_SHOT : 此时启动PendingIntent只能使用一次。...如果已存在描述PendingIntent,则更新不是取消该任务。 使用示例 下面是两种定时方式效果图: ?

2.9K10

Android M 特性 Doze and App Standby模式详解

IDLE_MAINTENANCE:处理挂起任务 如下图所示,Doze期间提供间隔一小段时间(30s)供应用程序使用网络和处理挂起活动。...从这张图我们可以看到,系统进入Doze模式后,系统会隔一段时间处理正在挂起任务,随着时间推移,后面间隔时间会越来越长,以此来减少电量消耗。...如果设备空闲很长一段时间,系统将允许空闲App一天一次访问网络。...Doze和App Standby区别: Doze模式需要屏幕关闭(通常晚上睡觉或长时间屏幕关闭才会进入),App Standby不需要屏幕关闭,App进入后台一段时间也会受到连接网络等限制。...由于这个原因,官方建议:如果你应用需要消息传递与后端服务集成,我们强烈建议尽可能使用GCM,不是单独维护自己网络链接。

7K11

任务调度框架Quartz(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细Cron表达式范例

Quartz主要接口类是Schedule、Job、Trigger,触发器Trigger就是定时任务触发时间,它规定安排了关联任务会在什么时候执行,并且表明了再次执行时机。...“结束时间属性会重写重复次数,这可能是有用,如果你想创建一个触发器,如每10秒触发一次,直到一个给定时刻,不是要计算次数,它会在开始时间和结束时间重复执行。...,每10s执行一次,共执行10次触发使用SimpleScheduleBuilderwithIntervalInSeconds(N)方法可以指定间隔N秒就执行一次;withRepeatCount(...MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT - 如果熄火,会告诉Quartz想要现在就执行一次(即使现在不是它原本计划触发时间...特别是基于日历概念,不是对具体间隔行为。

1.1K10

Android AlarmManager实现定时循环后台任务

这篇文章使用AlarmManager实现了Android定时后台循环任务。使用场景:项目需要app每隔一段时间就去服务端请求一次接口,从而更新本地保存信息。...AlarmManager简介 AlarmManager是Android中常用一种系统级别的提示服务,在特定时刻为我们广播一个指定Intent。...简单说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定Intent,通常我们使用 PendingIntent。...1.AlarmService类 /** * 一个定时任务 */ public class AlarmService extends Service { /** * 每1分钟更新一次数据...()+ONE_Miniute;//从开机到现在毫秒书(手机睡眠(sleep)时间也包括在内 Intent i=new Intent(this, AlarmReceive.class);

4.2K10

Quartz-Trigger详解

指定从某一个时间开始,以一定时间间隔(单位是毫秒)执行任务。 它适合任务类似于:9:00 开始,每隔1小时,每隔几分钟,每隔几秒钟执行一次。...但是不同是SimpleTrigger指定时间间隔为毫秒,没办法指定每隔一个月执行一次(每月时间间隔不是固定值),CalendarIntervalTrigger支持间隔单位有秒,分钟,小时,天,...相较于SimpleTrigger有两个优势: 1、更方便,比如每隔1小时执行,你不用自己去计算1小时等于多少毫秒。 2、支持不是固定长度间隔,比如间隔为月和年。但劣势是精度只能到秒。...它适合任务类似于:指定每天9:00 至 18:00 ,每隔70秒执行一次,并且只要周一至周五执行。...基本上它覆盖了以上三个Trigger绝大部分能力(但不是全部) CronTrigger 允许设定非常复杂触发时间表。

2K41

android service实现循环定时提醒功能

人每天都要喝8杯水才能保持健康,于是苦逼程序员总是一遍代码就忘了时间,于是我突发奇想能不能开发一个apk能够实现固定间隔时间定时提醒我要喝水了呢?...apk基本功能: 1)能够设置间隔时间 2)在apk应用被停止情况下仍然能定时提醒 3)能够播放指定闹铃 4)能够及时终止提醒 效果图: 设置间隔 ?...2)间隔时间提醒。这里采用是AndroidAlarm机制。 Android中定时任务一般有两种实现方式,一种是使用Java API里提供Timer类,一种是使用AndroidAlarm机制。...Alarm机制则不存在这种情况,它具有唤醒CPU功能,即可以保证每次需要执行定时任务时候CPU都能正常工作。需要注意,这里唤醒CPU和唤醒屏幕完全不是一个概念。...因为第一次开启任务时候不需要新建一个AlertDialog(用户第一次开启任务时候是设置好时间并且点击了“开启”,这个时候不需要创建Dialog)。

1.8K20

关于Android中设置闹钟相对比较完善解决方案

,第三个参数表示闹钟两次执行间隔时间,第三个参数表示闹钟响应动作。...setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi); 该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行间隔时间不是固定而已...从API 19开始,AlarmManager机制都是非准确传递,操作系统将会转换闹钟,来最小化唤醒和电池使用。...解决遇到坑 API 19以后如何设置重复闹钟 我们知道,我们在使用AlarmManager设置了提醒之后,是通过广播接收,设置提醒时间一到,系统发送我们自定义广播,我们接收到,应用程序提醒。...那提醒时候,我们可以再重新设置一次嘛,这就解决了API 19设置重复闹钟问题。 根据判断系统版本,使用不同设置闹钟方法,进行设置。接下来我们通过广播接收系统发来通知,进行闹钟提醒。

1.8K100

Quartz.net官方开发指南 第六课 : CronTrigger

如果你需要像日历那样按日程来触发任务,不是像SimpleTrigger 那样每隔特定间隔时间触发,CronTriggers通常比SimpleTrigger更有用。...使用CronTrigger,你可以指定诸如“每个周五中午”,或者“每个工作日9:30”或者“从每个周一、周三、周五上午9:00到上午10:00之间每隔五分钟”这样日程安排来触发。...当使用'L'选项时,最重要是不要指定列表或者值范围,否则会导致混乱。 'W' 字符用来指定距离给定日最接近周几(在day-of-week域中指定)。...注意,对于单独触发器来说,有些日程需求可能过于复杂不能用表达式表述,例如:9:00到10:00之间每隔5分钟触发一次,下午1:00到10点每隔20分钟触发一次。...这个解决方案就是创建两个触发器,两个触发器都运行相同任务。 Quartz Cron 表达式(时间格式写法)

60390

Android基础总结(8)——服务

onStartCommand()方法可能会重复调用多次;onCreate()方法和onDestroy()方法只会调用一次。...第二个参数就是定时任务触发时间,以毫秒为单位。如果第一个参数使用是ELAPSED_REALTIME或ELAPSED_REALTIME_WAKEUP则这里传入开机至今时间在加上延迟执行时间。...Alarm机制用法,先是获取到了AlarmManager实例,然后定义任务触发时间为10秒,在使用PendingIntent指定处理定时任务广播接收器为AlarmReceiver,最后调用set...另外需要注意是,从android4.4版开始,Alarm任务触发时间将会变得不准确,有可能会延迟一段时间后任务才能得到执行。这并不是bug,而是系统在耗电方面进行优化。...系统会自动检测目前有多少Alarm任务存在,然后将触发时间将近几个任务存放在一起执行,这就可以大幅度减少cpu被唤醒次数,从而有效延长电池使用时间

1.5K80

Java定时任务调度详解前言JDK原生定时工具:TimerJDK对定时任务调度线程池支持:ScheduledExecutorService定时任务大哥:QuartzSpring和Quartz整合

JDK原生定时工具:Timer 定时任务调度:基于给定时间点、给定时间间隔给定执行次数自动执行任务。...Task时间间隔,单位是毫秒 delay:执行task任务前延时时间,单位是毫秒 很显然,通过上述描述,我们可以实现: 延迟多久后执行一次任务;指定时间执行一次任务;延迟一段时间,并周期性执行任务...scheduleAtFixedRate:每次执行时间为上一次任务开始起向后推一个period间隔,也就是说下次执行时间相对于上一次任务开始时间点,因此执行时间不会延后,但是存在任务并发执行问题。...schedule:每次执行时间为上一次任务结束后推一个period间隔,也就是说下次执行时间相对于上一次任务结束时间点,因此执行时间会不断延后。...每天下午 2点到2点59分(整点开始,每隔5分触发) 0 0/5 14,18 * * ?

1K20

Java定时任务调度详解

JDK原生定时工具:Timer 定时任务调度:基于给定时间点、给定时间间隔给定执行次数自动执行任务。...scheduleAtFixedRate:每次执行时间为上一次任务开始起向后推一个period间隔,也就是说下次执行时间相对于上一次任务开始时间点,因此执行时间不会延后,但是存在任务并发执行问题。...schedule:每次执行时间为上一次任务结束后推一个period间隔,也就是说下次执行时间相对于上一次任务结束时间点,因此执行时间会不断延后。...每天下午 2点到2点59分(整点开始,每隔5分触发) 0 0/5 14,18 ? 每天下午 2点到2点59分、18点到18点59分(整点开始,每隔5分触发) 0 0-5 14 ?...然后,就是一些触发器、调度器配置了,这里不再展开介绍了,只要弄懂了原生Quartz使用,那么和Spring结合使用就会很简单。 如果觉得我分享不错,欢迎大家随手点赞、转发。

2K71

边开发边测试--故事从闹钟讲起

以上两种类型,和日期时间无关,不受时区,地区影响。 适用于以固定间隔重复alarm,比如每半小时触发一次。 (3)AlarmManager.RTC表示闹钟在睡眠状态下,这种类型闹铃不会唤醒系统。...适用于在一天某个特定时间触发alarm. (5)AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能(关机闹钟)。...如果设置了这个FLAG,表示描述PendingIntent对象不存在,它会返回null不是去创建它。 (4)FLAG_ONE_SHOT:创建PendingIntent对象只使用一次。...这种方式一方面更符合用户使用场景(比我们不断去调节时间看产品表现更接近用户场景),一方面可以更直观集中地发现问题(如多触发/不触发/触发不准时/触发后数据不正常等)。...3)对定时重复alarm,特别是触发网络操作,应该用一个随机时间点,不是固定在同一个时间点,以免服务器负载过重。 4)建议采用alarm+handler方式来控制定时任务。

1.7K90
领券