AlarmManager使用心得

本文探讨了Android中AlarmManager的使用心得,特别是在性能和功耗优化方面的重要性。重点介绍了setExactAndAllowWhileIdle相对于setAndAllowWhileIdle的准确性优势,并提到了AlarmManager在系统休眠期间的行为。同时,文章还提醒开发者,尽管AlarmManager功能强大,但在某些情况下,Handler可能是更合适的选择。
摘要由CSDN通过智能技术生成

AlarmManager使用心得

最近在做的项目,对于性能和功耗的优化非常重视。由此,也学习到了很多AlarmManager好用的用法。
基于此,我也对AlarmManager的内容产生了一些兴趣。去了android官网上查阅了AlarmManager相关资料,对比项目上实践过的内容,加深印象。
总的来说setExactAndAllowWhileIdle 是比 setAndAllowWhileIdle 要准时。
查阅官网时,发现AlarmManager没有中文翻译。所以机翻了一下,以便阅读。

此类提供对系统警报服务的访问。 这些使您可以安排应用程序在将来的某个时间运行。
警报响起时,系统会广播已为其注册的Intent,并在目标应用程序尚未运行时自动启动它。
设备处于睡眠状态时会保留已注册的警报(如果警报在这段时间内关闭,可以选择将其唤醒),但是如果将其关闭并重新启动,则将被清除。

只要警报接收器的onReceive()方法正在执行,警报管理器就会保持CPU唤醒锁。 这样可以确保手机在完成广播处理之前不会进入睡眠状态。
一旦onReceive()返回,警报管理器将释放此唤醒锁。 这意味着在某些情况下,一旦onReceive()方法完成,电话就会进入休眠状态。
如果您的警报接收器称为Context.startService(),则手机可能会在启动请求的服务之前进入睡眠状态。
为避免这种情况,您的BroadcastReceiver和服务将需要实施单独的唤醒锁定策略,以确保电话继续运行,直到服务可用为止。

警报管理器适用于希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。
对于正常的计时操作(滴答声,超时等),使用Handler会更容易且效率更高。

从API
19(Build.VERSION_CODES.KITKAT)开始,警报传递是不精确的:操作系统将转移警报,以最大程度地减少唤醒和电池消耗。这里有新的API支持需要严格传递保证的应用;
请参见setWindow(int,long,long,android.app.PendingIntent)和setExact(int,long,android.app.PendingIntent)。

Summary Nested classes class AlarmManager.AlarmClockInfo An immutable
description of a scheduled “alarm clock” event.
interface AlarmManager.OnAlarmListener
直接通知警报:从设置警报到传递警报,请求者必须连续运行,否则传递失败.

String ACTION_NEXT_ALARM_CLOCK_CHANGED Broadcast Action: Sent after
the value returned by getNextAlarmClock() has changed.

int ELAPSED_REALTIME
SystemClock.elapsedRealtime()中的警报时间(自启动以来的时间,包括睡眠)。 此警报不会唤醒设备;
如果设备在睡眠状态下熄灭,则将在下次设备唤醒时将其交付。

int ELAPSED_REALTIME_WAKEUP
SystemClock.elapsedRealtime()中的警报时间(自启动以来的时间,包括睡眠),它将在设备关闭时将其唤醒。

long INTERVAL_DAY 在API
19之前的Android上运行时,setInexactRepeating(int,long,long,android.app.PendingIntent)可以识别的可用不精确重复间隔。

long INTERVAL_FIFTEEN_MINUTES 在API
19之前的Android上运行时,setInexactRepeating(int,long,long,android.app.PendingIntent)可以识别的可用不精确重复间隔。

long INTERVAL_HALF_DAY 在API
19之前的Android上运行时,setInexactRepeating(int,long,long,android.app.PendingIntent)可以识别的可用不精确重复间隔。

long INTERVAL_HALF_HOUR 在API
19之前的Android上运行时,setInexactRepeating(int,long,long,android.app.PendingIntent)可以识别的可用不精确重复间隔。

long INTERVAL_HOUR 在API
19之前的Android上运行时,setInexactRepeating(int,long,long,android.app.PendingIntent)可以识别的可用不精确重复间隔。
int RTC System#currentTimeMillis中的警报时间(UTC中的挂钟时间)。 此警报不会唤醒设备;
如果设备在睡眠状态下熄灭,则将在下次设备唤醒时将其交付。

int RTC_WAKEUP
System#currentTimeMillis中的警报时间(UTC中的挂钟时间),在设备关闭时将唤醒设

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值