2012-02-01 23 views
8

我对Android比较陌生,所以我所要求的可能看起来很明显(尽管我已阅读所有类似标题的问题,并且已经进行了大量搜索)。我需要长时间连续监测加速度计。已经提出了两种方法:Android:Foreground服务与wakeLock

1)获取在监视加速度传感器的整个过程中保持的部分唤醒锁;和

2)监视前台服务中的加速度计。

第一种方法似乎使用了很多电池寿命。第二种方法应该导致一项服务很少被杀死,但我不确定“很少”意味着什么。应该采用哪种方法,我应该考虑哪些方法?

+0

嘿道格,你从哪里得到这些信息? – Bush 2012-05-14 13:20:24

+0

如果仍然有兴趣尝试报警管理器的方法:http://stackoverflow.com/questions/15451347/android-design-background-long-running-service-or-alarmmanager – 2013-04-29 20:23:40

回答

5

举行WakeLock和前景Service是没有真正相关的,不应该比较哪个方向是最好的。

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

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

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

请记住,在前台模式下启动服务并不保证您的应用不会被杀死。它可能仍然会发生,尽管很少。

你试图在这里实现什么?为什么要继续监测设备加速计?也许你应该只在你的应用的Activity位于前景时才监视它。

+2

所有前台服务保持唤醒锁。例如,对于音乐应用程序保持部分唤醒锁定。这是所有前台服务的情况吗? – Basher51 2014-09-11 06:13:09

1

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

+0

是否所有的前台服务都支持唤醒锁。例如,音乐应用程序会持有部分唤醒锁。这种情况也适用于所有前台服务吗? – Basher51 2014-09-11 06:13:26