首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AlarmMgr触发的时候是对的,有时是错的,为什么?

AlarmMgr触发的时候是对的,有时是错的,为什么?
EN

Stack Overflow用户
提问于 2022-04-15 00:48:03
回答 1查看 37关注 0票数 0

我将alarmMgr设置为这样:

代码语言:javascript
复制
alarmMgr.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
                1000 * 60 * 5L, alarmIntent)

和BroadcastReceiver输出

代码语言:javascript
复制
public class BroadcastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    System.out.println("Execute time:" + Calendar.getInstance().getTime());
}...}

我昨天拿到了正确的日志,然后就出错了。它看起来像在同一时间多次触发警报,我不知道为什么,我想可能是安卓工作室日志捕捉有一些未知的机制。

2022-04-14 10:44:40.447 8663-8663/com.example.ss I/System.out: 2022-04-14 10:46:40.441 8663-8663/com.example.ss I/System.out: 2022-04-14 10:48:40.440 8663-8663/com.example.ss I/System.out: 2022-04-14 10:50:40.444 8663-8663/com.example.ss I/System.out: 2022-04-14 10:52:40.446 8663-8663/com.example.ss I/System.out:

我整晚都在看日志,下面是日志的一部分。系统日志显示在这里,

2022-04-1507:33:39.945 13580-13580/com.example.ss I/System.out:执行时间:Fri 1507:33:39 GMT+09:00 2022 2022-04-1507:33:39.951 13580-13580/com.example.ss I/System.out:执行时间:Fri 1507:33:39 GMT+09:00 2022 2022-04-1507:33:39.954 13580-13580/com.example.ss I/System.out:执行时间:Fri 1507:33:39 GMT+09:00 2022 2022-04-1507:33:39.960 13580-13580/com.example.ss I/System.out:执行时间:Fri 1507:33:39 GMT+09:00 2022 2022-04-1507:33:39.963 13580-13580/com.example.ss I/System.out:执行时间:Fri 1507:33:39 GMT+09:00 2022 2022-04-1507:33:39.966 13580-13580/com.example.ss I/System.out:执行时间:Fri 1507:33:39 GMT+09:00 2022 2022-04-1507:33:39.969 13580-13580/com.example.ss I/System.out:执行时间:Fri 1507:33:39 GMT+09:00 2022 2022-04-15 07:35:40.066 13580-13580/com.example.ss I/System.out:执行时间:星期五4月15日07:35:40 GMT+09:00 2022 2022-04-15 08:40:40.096 13580-13580/com.example.ss I/System.out:执行时间:星期五04月15日08:40:40 GMT+09:00 2022 2022-04-15 08:40:40.103 13580-13580/com.example.ss I/System.out:执行时间:星期五04月15日08:40:40 GMT+09:00 2022 2022-04-15 08:40:40.106 13580-13580/com.example.ss I/System.out:执行时间:星期五04月15日08:40:40 GMT+09:00 2022

关于方法(不准确/实际时间),官方称为了节省电池,系统会一起触发一些报警,告警统计显示,根本没有这么近距离的报警,有时我得到了正确的输出。我还测试了间隔15分钟的方法,输出仍然出错,我不认为原因是不精确的方法。

警报统计: 1000:android +6s300ms运行,353个唤醒: +3s273ms 0唤醒40个警报,最后-4m9s148ms: alarm:com.android.server.action.NETWORK_STATS_POLL +2s837ms 0唤醒226个警报,最后-4m9s148ms: alarm:TIME_TICK +699 347 347唤醒347警报器,最后-1h41m9s348 347: walarmjob.delay +102 0唤醒1个警报,最后4m9s148: 警报:GraphicsStatsService +60 2唤醒2警报器,最后2小时14m49s133: walarm:ScheduleConditionProvider.EVALUATE +31ms 0唤醒1个警报,最后8h39m9s148ms: alarm:android.intent.action.DATE_CHANGED +9ms 1唤醒1个警报,最后-13h27m11s167ms: 瓦姆:JS懒惰 +8ms 1唤醒1个警报,最后-19h41m4s292ms: 瓦姆:重试 +6ms 2唤醒2个警报,最后-17h41m9s348ms: walarmjob.deadline u0a40:com.android.providers.calendar +364运行,4个唤醒: +364 4唤醒4警报器,最后-1小时39m9s148: walarm:com.android.providers.calendar.intent.CalendarProvider2 u0a89:com.android.systemui +470 27运行,27个唤醒: +470 27 27唤醒27警报器,最后-14h38m7s109 27: walarm:com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD u0a113:com.example.ss +4s532运行,0唤醒: +4s532ms 0唤醒185警报器,最后-4m9s148ms: 警报:com.example.ss/..BroadcastReciever`‘

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-15 10:33:09

  • 从API 19开始,所有重复的警报都是不准确的。如果您的应用程序需要精确的交付时间,那么它必须使用一次精确警报,重新安排每次发送时间。其targetSdkVersion早于API 19的遗留应用程序将继续将其所有警报(包括重复警报)作为精确处理。
  • 因此,如果您想实现精确的重复报警,请使用AlarmManager.setExact()并重新安排时间。
  • 参考谷歌
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71878969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档