【问题标题】:What is the most efficient way to detect if the date has changed? [closed]检测日期是否已更改的最有效方法是什么? [关闭]
【发布时间】:2013-09-16 15:44:17
【问题描述】:

我想做一个跑步教练应用。对于我所做的一些事情,我需要知道一天过去了,这意味着日期已经改变(24:00)。

这里有一些选项:

  • 当然,我可以随时检查当前时间是否小于 24:00,但效率不高。
  • 我还看到我可以使用意图过滤器 - ACTION_DATE_CHANGED - 以及会监听此意图的广播接收器,我会知道日期何时更改。 但是我认为这不是最有效的方法,因为它总是听并且可能会占用一些电池和 CPU。 Android 在提高广播接收器效率方面可能做得很好,但我仍然想知道它是否适合我的需求。
  • 使用警报管理器?

哪种方法最好,或者有什么不同的方法?你有什么建议,为什么?

【问题讨论】:

  • 您是否需要知道日期何时更改,或者如果日期与上次使用应用程序的日期不同,您是否需要知道何时运行应用程序?
  • 我是这个论坛的新手 仅供参考,Stack Overflow 不是一个论坛。这是一个问答网站,所以它的工作方式不同。为了充分利用 SO,我建议先使用 Quick Tour,另请参阅 How to Ask
  • 意图过滤器不能通过轮询工作。他们在系统中注册自己,系统只是将他们注册的操作通知他们。因此,这样做不会浪费 CPU 周期和电池(除非您注册的操作本身会消耗电池 - 例如查找当前位置)。
  • 我怎样才能添加更多有用的细节?这个问题代表了 iteslf - 检测日期是否已更改的最有效方法是什么,我想可能有 1-2 种方法可以以最有效的方式进行。
  • 无论如何,我需要随时知道日期何时发生变化,但如果应用程序仅在运行(在后台或前台),我也很高兴知道如何做到这一点。您还需要什么详细信息?

标签: java android date broadcastreceiver alarmmanager


【解决方案1】:

如果您需要在每次 00:00 时执行操作,您必须使用 AlarmManager 和 BroadcastReceiver。然后你就可以在接收器的 onReceive() 方法中做任何你必须做的事情。哦,顺便说一下,BroadcastReceivers 是最有效的方法,因为它们仅在 onReceive() 方法期间保持设备处于活动状态。

使用 AlarmManager 设置在每天 00:00 重复调用 onReceive。如果您需要示例,请在 cmets 中告诉我。

除此之外,如果您在一天过去后无需采取任何行动,您可以简单地检查应用程序本身。您始终可以将您的应用上次打开的时间保存到 SharedPreferences。

【讨论】:

  • 感谢您的回答,您能否提供一些代码来说明如何执行此操作,以及如何在 AlarmManager 和 BroadcastReceiver 之间进行连接?当应用程序在前台或后台运行时,AlarmManager 是否有可能错过时间更改,这意味着当 00:00 已经过去/到达时不会通知?
猜你喜欢
  • 1970-01-01
  • 2013-05-29
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
相关资源
最近更新 更多