2012-11-21 24 views
0

this问题与我所问的基本相似,我试图在每1秒运行一次可运行的服务上使用计时器,以使此可运行更新某些其他活动中的某些UI。用Handler类执行倒数计时器

这个活动可以在后台或者已经死了,但是服务不能停止倒计时,因为添加问题中的人说,我有时候会在所有可运行的程序中同时运行,当我唤醒手机时。

他得到的答案是使用AlarmManager,但Android文档不鼓励AlarmManager用于超时和滴答,并建议使用处理程序,因此任何人都得到了如何正确使用处理程序的例子吗?

注意的问题开始当手机进入睡眠状态,只有一段时间后accure,定时器的工作对于像30分钟,但几个小时它不...

+0

CountDownTimer只是一个具有一些额外功能的Handler,所以“用Handler类实现一个倒数计时器”将有一个Handler调用一个Handler ...我建议跳过CDT。无论如何,您是否需要在屏幕关闭时运行_every_ tick,或者只有在屏幕重新开启时计时器才会更新? – Sam

+0

好吧,当我想到它时,你的第二个想法是非常有吸引力的,不好想到它!,但第一个是我目前想要的... –

回答

1

一些概念...

睡眠模式

Android的内核会进入休眠模式(默认),如果没有用户交互或请求。这样做是为了尽量减少电池使用率,并意味着任何代码都将停止运行。

报警管理

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

请告诉我你的申请

你的服务去上,一旦设备进入睡眠停止。当设备被用户唤醒或某个其他应用程序在您的手机中发出的某个闹钟管理器请求时,您的服务将再次启动。当手机再次进入睡眠状态时,您的服务也会如此。

你应该做的

首先,你应该仔细想一想,如果你真的需要有更新会在未使用一段时间(在手机上时,它应该进入睡眠模式)。也许没有人使用它,并且使服务持续运行,将会保持蓄电池的畅通。

如果您不需要的服务不间断的运行,你有两个选择:

使用报警管理

唤醒在固定间隔时间的设备(使用频率较少可能),更新你的服务工作。如果这需要一些时间,请申请WAKE_LOCK并在完成后发布。

使用最后

如果你能等待手机用户被唤醒来更新你的服务工作,甚至更好。只删除所有更新请求,但最后一个除外。

最后

如果你真的需要服务不间断的运行,要求WAKE_LOCK服务启动时。不要忘记,你会在电池现场支付。

Note:如果您使用Timer,Handler或其他任何东西,则无论如何,上述内容将始终适用。

问候。