18

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

1) 获取一个部分唤醒锁,该锁在加速度被监控的整个过程中都被持有;和

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

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

4

2 回答 2

4

持有 aWakeLock和前景Service并没有真正的关系,也不应该与哪个方向最好进行比较。

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

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

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

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

你想在这里实现什么?为什么要持续监控设备加速度计?也许您应该仅在Activity您的应用程序处于前台时才对其进行监视。

于 2012-08-13T05:48:33.463 回答
1

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

于 2013-03-06T21:04:09.363 回答