使用Handler类实现倒计时器

时间:2012-11-21 19:07:30

标签: android timer handler

this问题基本上与我的问题类似,我试图在每1秒运行一次运行的服务上使用一个Timer,这个runnable会在其他一些Activity中更新一些UI。

此活动可以在后台或死机,但服务不能停止倒计时,因为添加的问题中的人说,我有时会在唤醒手机时立即运行所有可运行的运行。

他得到的答案是使用AlarmManager,但Android文档不鼓励使用AlarmManager进行超时和滴答,并建议使用处理程序,所以任何人都得到了如何使用处理程序正确完成它的例子?

请注意,当手机进入睡眠状态时,问题就会开始产生影响,但只有一段时间后,定时器效果会好30分钟,但几个小时后就没有... ...

2 个答案:

答案 0 :(得分:1)

一些概念......

睡眠模式

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

警报管理器

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

您的申请是怎么回事

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

你应该做什么

首先,您应该仔细考虑是否确实需要在手机未使用一段时间(当它应该进入睡眠模式时)进行更新。也许没有人使用它,并且让服务不断运行,将继续耗尽电池。

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

使用闹钟管理器

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

使用上次

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

<强>最后

如果您确实需要服务连续运行,请在服务启动时请求WAKE_LOCK。只是不要忘记你会用电池直接支付费用。

Note:如果您使用TimerHandler或其他任何内容,则无关紧要,以上内容将始终适用。

问候。

答案 1 :(得分:-1)

您可以尝试ScheduledExecutor