AlarmManager



AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);



PendingIntent pendingIntent = PendingIntent.getService(context, 0, service, PendingIntent.FLAG_UPDATE_CURRENT);


alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 15 * 1000 * 60, pendingIntent);

                                                  设置不精确(精确的耗电)             设置从开机到现在时间计算(rtc耗电)                                      代表系统开机开始到现在已过去的时间


### 使用 Android AlarmManager 的概述 `AlarmManager` 是 Android 提供的一个系统服务,用于调度设备上的定时任务。它允许开发者在特定时间触发某些操作,即使应用已经关闭或者设备处于休眠状态。然而,需要注意的是 `AlarmManager` 并不适合所有的场景[^1]。 #### 创建和设置 AlarmManager 实例 要使用 `AlarmManager`,首先需要通过系统的上下文获取其实例: ```java AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); ``` 接着定义一个待执行的操作,通常会封装在一个 `PendingIntent` 中。以下是创建广播接收器的示例代码: ```java Intent intent = new Intent(context, YourBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); ``` 注意:从 Android 12 开始,必须指定 `FLAG_IMMUTABLE` 或者 `FLAG_MUTABLE` 来声明 `PendingIntent` 是否可以被修改[^2]。 #### 设置一次性闹钟 如果希望某个事件只发生一次,则可以通过如下方式实现: ```java long triggerTimeMillis = System.currentTimeMillis() + 5 * 60 * 1000; // 延迟五分钟 alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTimeMillis, pendingIntent); ``` 这里选择了 `RTC_WAKEUP` 类型,表示无论设备是否进入睡眠模式都会唤醒并触发该意图。 #### 定期重复的任务 对于周期性的任务处理,可以选择不同的方法来满足需求。例如精确间隔的时间表适合采用以下形式之一: ```java // 设定每十分钟提醒一次 alarmManager.setRepeating( AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10 * 60 * 1000L /* 十分钟 */, pendingIntent ); ``` 但是要注意,在现代版本的 Android 上(特别是 Doze Mode 和 App Standby 下),频繁的小间隔报警可能不会按照预期那样准时到达[^1]。 #### 取消已注册的警报 任何时候都可以调用下面的方法停止之前设定好的任何类型的警报: ```java if(alarmManager != null){ alarmManager.cancel(pendingIntent); } pendingIntent.cancel(); ``` 这一步非常重要,尤其是在用户主动退出程序之后不再需要继续运行后台逻辑的情况下应该及时清理资源以节省电量消耗[^2]。 --- ### 关于 Wake Locks 的注意事项 长时间持有部分唤醒锁可能会导致电池快速耗尽等问题,因此务必谨慎管理它们的生命週期。除非绝对必要,否则尽量避免长期保持屏幕亮起或者其他高能耗行为[^2]。 ### 性能优化建议 由于能源效率方面的考量,推荐优先考虑其他更适合当前业务模型的技术方案比如 JobScheduler/WorkManager 结合 FCM 推送消息机制完成即时通讯类功能开发工作而不是单纯依赖传统的 AlarmManager 构建复杂的应用架构设计思路[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值