Android:前景服务与wakeLock

时间:2012-02-01 22:56:02

标签: android android-service android-wake-lock

我对Android比较陌生,所以我要问的可能看起来很明显(虽然我已经阅读了所有类似标题的问题,并进行了广泛的搜索)。我需要长时间连续监控加速度计。提出了两种方法:

1)获取部分唤醒锁定,该锁定在整个加速器被监视的时间内保持;和

2)在前台服务中监控加速度计。

第一种方法似乎耗费了大量电池寿命。第二种方法应该导致服务很少被杀死,但我不确定“很少”意味着什么。应该使用哪种方法,还有其他我应该考虑的方法吗?

2 个答案:

答案 0 :(得分:5)

持有WakeLock和前景Service并不是真正相关的,不应该与哪个方向进行比较。

Android操作系统旨在根据各种因素交换流程。这意味着您的流程可能会在任何时候被Android杀死,它提供了一个框架来帮助您(开发人员)确保您的应用可以在发生这种情况时保存并恢复其状态。

WakeLock只是防止CPU休眠,这有助于在手机不使用时节省电量。

现在,两者的结合将帮助您实现您想要的效果,但需要很高的用户成本。我不希望手机中的应用程序保持CPU不断运行或通知栏中不断显示通知图标(这就是前台服务的作用)。

请注意,以前台模式启动服务并不保证您的应用不会被杀死。它可能仍然很少发生。

你想在这里实现的目标是什么?为什么要继续监控设备加速度计?也许您应该只在应用程序的Activity位于前台时监控它。

答案 1 :(得分:1)

我有完全相同的需求和问题。我相信解决方案是同时使用部分唤醒锁和前台服务。 Android将尝试不杀死持有唤醒锁的后台服务,但是当它需要资源并可能在以后重新启动时可以自由地杀死它。这很好用于很多目的,但至少在我的情况下还不够好。将服务置于前台状态是告诉Android杀死它是不可接受的方式。是的,它可能仍然会在极端情况下发生,但现在这将违反API合同,而使用后台服务Android可以自由地杀死它。因此,您应该编写好像永远不会发生的代码,但只知道这是一个可能但很可能是罕见的错误。