当前位置: 首页 > 知识库问答 >
问题:

Android AlarmManager重新调度逻辑

麹鸿煊
2023-03-14

我有一个应用程序,允许用户安排警报在特定时间响起,并在他们选择的间隔内重复。我使用JSON保存警报细节,使用SharedPreferences作为存储。

我正在使用AlarmManager来安排我的应用程序何时应该被通知,警报应该响起来通知用户。我目前正在使用AlarmManager的setRepeating()方法,提供用户提供的时间间隔。这工作得很好,理论上应用程序永远不需要更新存储下一个报警时间的JSon,因为AlarmManager只需使用该间隔重新安排下一个报警时间。

  • 在警报响起时更新JSon下一个警报时间,即使这可能不是必需的(只要没有重新启动,setRepeating()就会处理此问题)?
  • 注册并监听关机广播,然后更新JSon(这就产生了问题--如果手机正在关机,应用程序需要多长时间才能计算并将警报详细信息写入存储)?
  • 不要更新JSon,而是向由AlarmManager唤醒的对象添加逻辑,以决定刚刚广播的警报是否有效,是否应该向用户发出警报?

我相信以上任何一种方法都行得通,但我不能决定哪种方法是最好的。

共有1个答案

姜景辉
2023-03-14

这似乎主要是一个选择的问题。您注意到的问题与Linux笔记本电脑中常见的问题相似,并由Anachrond解决。在我看来,我只需在每次收到事件时更新时间并将其存储在SharedPreferences中。试图监听系统何时关闭可能并不完全可靠(当您的用户--可能是喝醉了酒的大学生--放下设备,电池没电时会发生什么?)。相反,我认为在这种情况下最好的做法是--每次警报触发时--重新计算发送下一个警报的时间,将其存储在某个地方,并在适当的引导计划中进行。

 类似资料:
  • 问题内容: 对于以下代码,为什么打印A,B?我希望它能打印B,B。而且,由JVM执行的方法调用是动态还是静态评估? 问题答案: 重载由编译器 静态 确定。 重写 是在执行时完成的,但这不是这里的因素。 的静态类型为A,因此第一个方法调用解析为。

  • 在AnyLogic中,我如何在运行模拟后让事件被触摸,这样每次我都不需要从日志复制表并粘贴到Excel。我试图使用数据库来存储变量,但它似乎太复杂了,我不能使用它! 当我在anylogic中运行模型时,事件不能被触发。它显示事件没有被安排。我尝试了很多方法,但也是这样。

  • 语境 我试图使用JDBC在集群模式下使用quartz调度器。 问题 在开始使用集群模式下的jdbc之前,我只是用RAM存储测试了调度器。这没有问题,我能够重新启动调度程序(主类)没有任何错误。我现在遇到的问题是,当我停止执行(CTRL+C)然后重新启动它时,我总是得到错误消息: 我不明白这是怎么回事。quartz不支持重新启动调度程序吗?我的意思是,如果出现崩溃,调度程序在恢复后重新启动会发生什么

  • 规格- 在游戏中,孩子们坐成一圈,圈外的一个人(领导者)唱一首固定字数的歌。绕着圆圈顺时针移动,领导者为歌曲中的每个单词指向环中的一个新孩子。歌曲最后一个词被指向的孩子出局,必须离开圆圈。领导者然后用较小的圆重复这个过程。游戏继续进行,直到最后一个孩子被淘汰。这个孩子是开始下一个游戏的领导者。 我几乎已经弄明白了这个逻辑,但在我的数组索引中找不到一个bug,我将当前元素添加到另一个数组中(以显示消

  • 如果一个节点没有响应(可能是由于过载或网络问题),那么Kubernetes是否可以在原来的pod仍在运行的情况下在另一个节点上重新安排一个pod? 似乎其中一些行为已经明确指定,但我不知道如何验证它,除非在云提供商上设置多个节点并尝试它。

  • 问题内容: 我有一个集合(或列表或数组列表),我想在其中放置String值和double值。我决定使其成为对象的集合,并使用重载ond多态性,但是我做错了什么。 我进行了一些测试: 在测试中,似乎参数类型是在编译时而不是在运行时决定的。这是为什么? 编辑: 确定要调用的方法是在编译时确定的。有避免使用操作员的解决方法吗? 问题答案: 这是voo的答案,并提供了有关后期绑定的替代方法的详细信息。 通