【问题标题】:Implementing A Count Down Timer with Handler class使用 Handler 类实现倒数计时器
【发布时间】:2012-11-21 19:07:30
【问题描述】:

this 的问题与我的问题基本相似,我尝试在每 1 秒运行一次可运行对象的服务上使用计时器,该可运行对象会更新其他活动中的某些 UI。

此活动可以在后台运行或停止,但服务不能停止倒计时,正如附加问题中的人所说,我有时也会在唤醒手机时同时运行所有可运行文件。

他得到的答案是使用 AlarmManager,但 Android 文档不鼓励使用 AlarmManager 来处理超时和滴答声,并建议使用处理程序,所以有人能举例说明如何正确使用处理程序吗?

请注意,当手机进入睡眠状态时问题开始出现,并且仅在一段时间后,Timer 可以正常工作 30 分钟,但在几个小时内就不行了......

【问题讨论】:

  • CountDownTimer 只是一个带有几个额外功能的 Handler,因此“使用 Handler 类实现倒数计时器”将有一个 Handler 调用一个 Handler……我建议跳过 CDT。无论如何,您是否需要在屏幕关闭时运行每个滴答声,或者仅在屏幕重新打开时计时器是最新的?
  • 嗯,你的第二个想法我想想就很吸引人,我想不通!但第一个是我目前想要的......

标签: android timer handler


【解决方案1】:

几个概念...

睡眠模式

如果没有用户交互或WAKE_LOCK 请求,Android 内核将进入睡眠模式(默认情况下)。这样做是为了最大限度地减少电池使用率,这意味着任何代码都将停止运行。

报警管理器

这是一个可以设置 timmer 事件以唤醒内核并开始运行代码的 API。如果应用程序需要执行一些长时间的活动,它应该请求唤醒舔,否则内核将在短时间内再次进入睡眠模式。

您的应用程序发生了什么

一旦设备进入睡眠状态,您的服务就会停止。当设备被用户或手机中其他应用程序发出的警报管理器请求唤醒时,您的服务将再次启动。当手机再次进入睡眠状态时,您的服务也会进入睡眠状态。

你应该做什么

首先,您应该仔细考虑是否真的需要在手机一段时间未使用时(应将其置于睡眠模式)进行更新。也许没有人在使用它,并且让服务持续运行,会不断消耗电池。

如果您不需要服务持续运行,您有两种选择:

使用警报管理器

以固定的间隔时间唤醒设备(使用尽可能低的频率)并更新您的服务工作。如果这需要一些时间,请请求 WAKE_LOCK 并在完成后释放它。

最后使用

如果您可以等待用户唤醒手机来更新您的服务工作,那就更好了。只需删除除最后一个之外的所有更新请求。

终于

如果您确实需要服务持续运行,请在服务启动时请求WAKE_LOCK。只是不要忘记您将在电池现场支付。

Note: 不管您使用TimerHandler 还是其他任何东西,以上内容始终适用。

问候。

【讨论】:

    【解决方案2】:

    你可以试试ScheduledExecutor

    【讨论】:

    • 这是一个java并发类,不会是解决这个问题的android路由。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多