2010-02-23 152 views
9

我正在做一个Android手机的耗电研究。我想每10分钟运行一次电池检查,直到电池完全死亡。我一直在遇到问题,使其工作。永远在后台运行服务..? Android

在我第一次尝试时,我在服务类中使用计时器,并且每10分钟安排一次电池检查。但很快我发现当屏幕熄灭时服务暂停。

然后我尝试使用AlarmService,每隔10分钟使用一次警报呼叫唤醒我的服务并检查电池电量并将数据保存到SD卡上的文件中。它与屏幕一起工作。但是,我只能获得9小时的数据......看起来AlarmService在几个小时后的某个时间点停止。我不知道为什么它是这样的,有系统杀死它的内存问题?

所以我的问题是,有没有人写过一些服务在后台运行(像永远)?你如何做到这一点,我会非常感谢一个示例代码?

我正在阅读一些帖子,说有一个部分唤醒锁,我可以用来保持服务活着..这是正确的方法来做到这一点?

非常感谢,我希望我能在这里得到一些有用的答案。

回答

10

在我第一次尝试,我用一个 服务类定时器,并安排 电池检查每10分钟。但很快 我发现当屏幕熄灭时服务暂停了 。

你可能没有拿着WakeLock,所以设备睡着了。

似乎AlarmService停在 一些点几个小时

我相当怀疑之后。

所以我的问题是,有没有人写 一些服务之前 运行(像永远)的背景是什么?

无法创建永久运行的服务。应该可以通过AlarmManager创建一个计划任务,该任务将被“永久”调用。

我目前正在读一些职位 说,有一个局部唤醒 锁我可以用它来保持服务 活着..这是做 了正确的方法是什么?

我不确定“it”是什么。但是,如果您想让设备保持清醒状态 - 无论是第一种方法还是仅仅在AlarmManager触发的工作中 - 您都需要持有WakeLock

Here is a project几乎完全符合您所描述的AlarmManager,减去检查电池电量,但使用WakefulIntentService确保设备保持清醒状态。如果在电池关闭之前无法运行此代码,请加入cw-android Google Group并报告您的发现,然后我们再来看看它。

+0

非常感谢您的宝贵信息,我现在用的局部唤醒锁,以保持我的服务(使用定时器调度)还活着。看起来它效果很好,我会一直等到电池关闭,并确保没有问题。 再次感谢! – sunocky 2010-02-24 09:58:56

+0

即使服务是前台服务,屏幕关闭时服务是否暂停? – remi 2013-06-24 05:10:49