调度重复的闹钟

AlarmManager计时不准,在手机灭屏后延迟的问题 应用需要周期性的提醒用户,但是在使用alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime,delay,pendIntent) 设置周期性广播后,始终无法完美体验这一效果,搞得本书生是在是头大呀!查阅API发现对这一方法的解释为在API19后将不再准时,需要参考setWindow()或者setExac 阅读详情


闹钟的具体类型:

  • ELAPSED_REALTIME:从设备启动之后开始算起,度过了某一段特定时间后,激活 Pending Intent,但不会唤醒设备。其中设备睡眠的时间也会包含在内。
  • ELAPSED_REALTIME_WAKEUP:从设备启动之后开始算起,度过了某一段特定时间后唤醒设备。
  • RTC:在某一个特定时刻激活 Pending Intent,但不会唤醒设备。
  • RTC_WAKEUP:在某一个特定时刻唤醒设备并激活 Pending Intent。

ELAPSED_REALTIME_WAKEUP 案例

每隔在 30 分钟后唤醒设备以激活闹钟:

// Hopefully your alarm will have a lower frequency than this!
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        AlarmManager.INTERVAL_HALF_HOUR,
        AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);

在一分钟后唤醒设备并激活一个一次性(无重复)闹钟:

private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
...
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() +
        60 * 1000, alarmIntent);

RTC 案例

在大约下午 2 点唤醒设备并激活闹钟,并不断重复:

// Set the alarm to start at approximately 2:00 p.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);

// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY, alarmIntent);

让设备精确地在上午 8 点半被唤醒并激活闹钟,自此之后每 20 分钟唤醒一次:

private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
...
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

// Set the alarm to start at 8:30 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);

// setRepeating() lets you specify a precise custom interval--in this case,
// 20 minutes.
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        1000 * 60 * 20, alarmIntent);
使用 setRepeating() 时,你可以制定一个自定义的时间间隔,但在使用 setInexactRepeating() 时不支持这么做。此时你只能选择一些时间间隔常量,例如: INTERVAL_FIFTEEN_MINUTES  , INTERVAL_DAY  等。完整的常量列表,可以查看  AlarmManager 。


取消闹钟

你可能希望在应用中添加取消闹钟的功能。要取消闹钟,可以调用 AlarmManager 的cancel()方法,并把你不想激活的 PendingIntent 传递进去,例如:

// If the alarm has been set, cancel it.
if (alarmMgr!= null) {
    alarmMgr.cancel(alarmIntent);
}

在设备启动后启用闹钟

1. 在应用的 Manifest 文件中设置 RECEIVE_BOOT_CMPLETED 权限,这将允许你的应用接收系统启动完成后发出的 ACTION_BOOT_COMPLETED 广播(只有在用户至少将你的应用启动了一次后,这样做才有效):

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

2. 实现 BoradcastReceiver 用于接收广播:

public class SampleBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            // Set the alarm here.
        }
    }
}

3. 在你的 Manifest 文件中添加一个接收器,其 Intent-Filter 接收 ACTION_BOOT_COMPLETED 这一 Action:

<receiver android:name=".SampleBootReceiver"
        android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>

注意 Manifest 文件中,对接收器设置了android:enabled="false"属性。这意味着除非应用显式地启用它,不然该接收器将不被调用。这可以防止接收器被不必要地调用。你可以像下面这样启动接收器(比如用户设置了一个闹钟):

ComponentName receiver = new ComponentName(context, SampleBootReceiver.class);
PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP);

一旦你像上面那样启动了接收器,它将一直保持启动状态,即使用户重启了设备也不例外。换句话说,通过代码设置的启用配置将会覆盖掉 Manifest 文件中的现有配置,即使重启也不例外。接收器将保持启动状态,直到你的应用将其禁用。你可以像下面这样禁用接收器(比如用户取消了一个闹钟):

ComponentName receiver = new ComponentName(context, SampleBootReceiver.class);
PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP);

参考:

http://hukai.me/android-training-course-in-chinese/background-jobs/scheduling/alarms.html




HarmonyOS 5.0.0 或以上:创建系统级提醒与定时闹钟(含通知与时间调度) 每天 8 点提醒打卡、阅读设置 N 分钟后的定时任务定时弹出通知 + 本地页面跳转设置定时提醒(N 秒后触发)使用创建闹钟触发后发出系统通知(可跳转页面) 阅读详情

相关推荐

深入理解Android闹钟调度与处理

本文深入探讨了Android中闹钟的调度和处理方法,包括设置精确与不精确重复闹钟的策略,以及如何使用PendingIntent在不同Android版本间保持一致性。我们还将学习如何与AlarmManager配合使用BroadcastReceiver、Activity和Service处理闹钟,以及如何通过AlarmClockInfo设置用户可见的闹钟图标。

weixin_30923011的博客 569

AlarmManager用法的注意事项

1、概述 2、不重复定时操作 3、重复定时操作 4、triggerAtMillis参数问题 5、adb查看闹钟信息 6、总结

wh义华的专栏 3011

Android闹钟管理:精确调度与省电模式的权衡

本文深入探讨了Android平台上的闹钟调度,包括如何设置一次性和重复闹钟,以及如何处理Android的省电模式(Doze模式)对闹钟调度的影响。文中详细介绍了不同API级别下的闹钟设置方法,并强调了精确与不精确闹钟调度之间的权衡,以及如何调试和取消闹钟。

weixin_30923011的博客 945

Android中AlarmManager的使用

本篇博客的部分内容参考了:https://www.cnblogs.com/ProtectedDream/p/6351447.html   最近在写一个 “抢订羽毛球场地” 的 app,有个开抢时间的设定,抢订时需要唤醒手机,并开启目标 app 进行预订操作。 因此需要用到可以摆脱 Android Dozen 模式的 AlarmManager。 在介绍 AlarmManager 之前,先简单...

ding3106的专栏 5312

掌握Android应用中的重复闹钟设置与管理

本文详细介绍了如何在Android应用中实现重复闹钟功能。通过学习AlarmManager的使用,包括设置不精确周期性闹钟,确保即使应用未运行,也能够定时提醒用户。文章还涵盖了如何使用PendingIntent和BroadcastReceiver来处理闹钟触发的通知,并讨论了在设备处于Doze模式下的处理方法。最后,提供了如何检查和管理闹钟状态的技巧,以确保用户体验的连贯性。

weixin_35257663的博客 1155

SPOC闹钟项目实战:从需求拆解到状态机实现

时间管理与定时调度是编程中的基础问题,其核心在于时间表示、触发条件判断与重复规则处理。通过整数存储时间、比较总分钟数,可避免字符串比较的陷阱;引入状态机模型,能将空闲、触发、贪睡等状态转换收拢到统一方法中,提升代码可维护性。这类逻辑广泛应用于闹钟、任务提醒、定时备份等场景。本文以SPOC课程中的Alarm作业为例,完整演示从需求分析、最小可行设计到状态机进阶的闹钟实现路径,并总结跨天重复、贪睡覆盖等常见坑点。

weixin_33585822的博客 280

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

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

孔小乐的博客 8394

Android闹钟App完整开发指南:从Room存储到AlarmManager精确调度

Android开发中,后台任务的可靠性调度是一项无法绕开的系统级挑战。为解决省电策略导致的进程回收与任务延迟,系统提供了一套完整的调度服务机制:通过AlarmManager将定时任务注册到系统队列,使应用在进程被杀死后仍能按预设时间接收广播,进而借助前台服务完成资源密集型操作;同时结合Room数据库实现配置的安全落盘,形成从数据到调度的闭环。这一架构的价值在于,它能保障闹钟提醒、日历事件等工具类应用在Doze省电模式、设备重启等极端情况下依然稳定运行。从开发实践看,精确闹钟权限适配、重复闹钟重排策略、开机自

weixin_29171129的博客 282

闹钟管理器AlarmManager(整理)

在Android中,可以使用闹钟管理器来触发事件,包括广播BroadcastReceiver,服务Service和活动Activity。这些事件可以在特定的时刻或者以固定的时间间隔来触发。        使用闹钟管理器一般有以下几个步骤:         1、获取到闹钟管理器的服务,即AlarmManager;         2、确定设置闹钟的时刻;         3、创建要调用的接收

zartzwj的专栏 1443

android设置和取消闹钟

android设置和取消闹钟,有详细注释,可运行。

COMSOL新手必看:锂电池仿真从入门到精通的5个实战案例(附模型文件)

本文为COMSOL新手提供锂电池仿真的5个实战案例,涵盖锂枝晶生长模拟、电池热失控预警、SOC估计等效电路模型、电池组液冷系统热管理及SOH衰退模型构建。通过详细步骤和参数设置,帮助用户快速掌握锂电池仿真技术,提升新能源研发效率。附模型文件可直接应用。

wdx01234567的博客 259

Android调度重复闹铃

Contents 调度重复闹铃... 1 理解折中... 1 最佳实践... 1 设置重复闹铃... 2 选择闹钟类型... 2 决定闹钟的精确度... 4 取消闹铃... 4 设备重启时启动闹铃... 5 Doze和应用待机的影响... 6   调度重复闹铃 闹钟(基于AlarmManager类)可以让应用不管自己的生命周期的情况下触发特定时间下的操作。例如,可以用闹钟实...

yubing1015的博客 1629

Innovus ECO技巧:用setEcoMode+ecoAddRepeater实现批量buffer替换的5个关键步骤

本文详细介绍了在Cadence Innovus工具中,利用setEcoMode与ecoAddRepeater命令实现高效、批量Buffer/Inverter替换的工程化策略。通过启用批处理模式、构建可维护的替换规则、掌握高级定位技巧以及规避布线陷阱等5个关键步骤,帮助芯片设计工程师在ECO阶段大幅提升修改效率与质量,确保设计稳定签核。

d6e7f8的博客 1116

Android实现简易闹钟(附带源码)

Android实现简易闹钟(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1575

基于cat12和SPM12进行VBM&SBM数据分析笔记1——数据预处理

基于cat12数据分析基础教程笔记 今年是小编步入研究生生活的第一年,研究方向待定,但主要以磁共振成像为主,以后会不断地总结这方面的知识,涉及MRI扫描,数据分析基础方法理论,软件操作教程,文献阅读笔记总结等等,用来记录我的研究生三年学习过程。编写尽量简洁明了,通俗易懂,本就是小白,也能体会小白的痛。不过这也要谢谢一个人手动@小白(网名),是他教我要把自己所学的写下来,讲出来才能真正的做到输入和输出,查漏补缺。而cat12软件操作是我面临的第一个数据分析的训练,写的可能也不会非常到位,还望各位专业人士指出改

Sophia2023的博客 4万+

乐鑫ESP32-C6产测全流程:RAM固件测试与阈值校准实战指南

Wi-Fi模组量产测试是保障IoT设备射频性能与硬件可靠性的关键环节,其核心在于基于RAM的无损固件加载、可配置的阈值判定机制及多工位协同控制。该流程依托串口协议与结构化配置(如JSON阈值文件、.bin测试固件),实现RF性能(fb_rssi、tx_power)、GPIO导通性、Flash ID识别与固件版本校验等原子化测试项的自动化执行。技术价值体现在避免Flash擦写风险、支持动态温补与在线学习校准,并无缝对接MES系统实现质量数据闭环。典型应用场景包括ESP32-C6/C3/S2等乐鑫全系Wi-Fi

weixin_35756690的博客 310

闹钟重复定时_java中的任务调度之Timer定时器(基本案例和源码分析)

定时器相信大家都不陌生,平时使用定时器就像使用闹钟一样,我们可以在固定的时间做某件事,也可以在固定的时间段重复做某件事,今天就来分析一下java中自带的定时任务器Timer。一、Timer基本使用在Java中为我们提供了Timer来实现定时任务,当然现在还有很多定时任务框架,比如说Spring、QuartZ、Linux Cron等等,而且性能也更加优越。但是我们想要深入的学习就必须先从最简单的开始...

weixin_34847560的博客 709

阻抗匹配与史密斯(Smith)圆图

在找到点B和B'后,我们就能够测量A'到B和B'到D的弧长,前者就是C的归一化电纳值,后者为L的归一化电抗值。当然,表面上看新的点好像是一个不同的阻抗,实际上Z和1/Y表示的是同一个元件(这个新值在圆图上呈现为一个不同的点,而且反射系数也不相同,依次类推)。出现这种情况的原因是我们的图形本身是一个阻抗图,而新的点代表的是一个导纳。这个方程是在复平面(Γr, Γi)上、圆的参数方程(x - a)² + (y - b)² = R²,它以[r/(r + 1), 0]为圆心,半径为1/(1 + r)。

qq_55759599的博客 3961

Android闹钟 AlarmManager的使用(1)

other)方法的说明可知,两个Intent从intent resolution(filtering)(Intent决议或过滤)的角度来看是一致的,即认为两个Intent相等。即是说,Intent的action,data,type,class,categories是相同的,其他的数据都不在比较范围之内。2.如果已经有一个相同intent的闹钟被设置过了,那么前一个闹钟将会取消,被新设置的闹钟所代替。1.如果声明的triggerAtMillis是一个过去的时间,闹钟将会立即被触发。

2401_84538391的博客 643

从零到一破解Uber实时行程API:逆向工程与高并发爬虫实战

在数据采集领域,Uber的实时行程数据始终处于“传说级”难度。动态令牌系统- 每30秒轮换的Bearer Token证书固定(Certificate Pinning)- 阻止中间人攻击请求签名算法- 基于时间戳+用户设备的HMAC-SHA256行为分析- 鼠标轨迹、请求间隔的机器学习模型全链路加密- GraphQL端点的payload加密目录前言:为什么Uber爬虫被称为“地狱难度”?第一章:环境准备与法律边界1.1 技术栈选择(2026年最新)1.2 法律免责声明。

2201_76125261的博客 892

毕设帮扶:从0到1搭建基于YOLOv5的打架斗殴检测系统——助你搞定深度学习毕设

做完这个毕设,你已经掌握了从数据准备到模型部署、界面开发的全流程。把模型部署到边缘设备(如安防摄像头的嵌入式系统)上,实现本地化实时检测与报警;加入行为严重程度分析(如轻微推搡 vs 严重斗殴)、涉事人员数量统计,让系统从“检测”升级为“智能安防决策”;尝试融合声音、红外等多模态数据,打造全方位的暴力事件监测系统。按照这个教程一步步做,你的毕设肯定能做得很扎实。要是过程中遇到啥问题,别担心,慢慢梳理或者咱们一起聊聊,一定能把这个毕设做成你满意的作品。

LXY_LOVE36的博客 118

Android Alarm闹钟

1,设置闹钟(只响一次) [code="java"] Intent intent = new Intent(AlarmController.this, OneShotAlarm.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, 0); ...

sunney2012的专栏 164

【DEIM创新改进】全网独家创新、注意力改进篇 | AAAI 2026 | DEIM 引入轻量级群体注意力(LWGA)模块,可以显著提高其多尺度物体检测能力,特别是在小物体和复杂背景下的表现

本文提出了一种改进的DEIM网络模型,通过引入轻量级LWGA模块显著提升了多尺度物体检测性能。LWGA模块采用局部和全局注意力机制,有效提升了小物体和复杂背景下的识别能力,同时保持低计算成本。该模块通过分割输入特征图并应用多种注意力机制(GPA、RLA、SMA、SGA)进行特征提取和融合,优化了多尺度物体的特征表示。实验表明,改进后的DEIM模型在遥感图像处理等任务中表现出色,在12个数据集上实现了性能与计算效率的最佳平衡,为资源受限设备提供了高效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 272

闹钟结合广播实现定时执行任务

需在 10 秒内完成,否则触发 ANR。建议将数据处理转至子线程或。应用进程被杀死后闹钟失效,可通过前台服务或。提升任务优先级,允许在低电量模式下触发。可能因系统优化导致间隔不准确,改用。:基于 UTC 时间,适合绝对时间点。:基于设备启动时间,适合相对间隔。Android 4.4+ 后。并在每次触发后重新调度。

540

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

cw-omnibus AlarmManager 示例精讲:用 setRepeating 实现周期性重复闹钟(Simple 示例源码全解)

本篇技术指南围绕开源仓库 cw-omnibus(*The Busy Coder's Guide to Android Development* 全量示例源码)中的 `AlarmManager/Simple` 示例展开,完整讲解 Android 上"周期性重复闹钟"的最小可运行实现:如何在 `onCreate` 中通过 `AlarmManager.setRepeating()` 注册每 5 秒触发一

gitblog_00841的博客 198

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 保持设备唤醒
下一篇: 使用IntentService执行后台任务
mnizq
博客等级 码龄15年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值