安卓:前台服务 vs. WakeLock

18

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

1)获得一个在监控加速度计时保持唤醒的部分唤醒锁;和

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

第一种方法似乎会消耗大量电池寿命。第二种方法应该会导致服务很少被杀死,但我不确定“很少”具体是多久。应该使用哪种方法,是否有其他替代方案?


嘿,道格,你从哪里得到那个信息的? - Bush
如果您仍然感兴趣,请尝试使用闹钟管理器方法:https://dev59.com/E2_Xa4cB1Zd3GeqP4b7R - Mr_and_Mrs_D
2个回答

4
持有WakeLock和前台服务并不相关,不应该将它们比较为哪个方向更好。Android操作系统根据各种因素来交换进程。这意味着您的进程可能会被Android在任何时候杀死,并提供了一个框架来帮助您(开发者)确保您的应用程序可以在这种情况下保存和恢复其状态。WakeLock只是防止CPU休眠,从而有助于节省电池电量。现在,两者的结合可以帮助您实现您想要的目标,但用户成本很高。我不希望我的手机上有一个应用程序持续运行CPU或连续显示通知栏中的通知图标(这就是前台服务所做的)。请记住,以前台模式启动服务不能保证您的应用程序不会被杀死。尽管这种情况很少发生。你想在这里实现什么?为什么要持续监测设备的加速度计?也许您应该仅在您的应用程序Activity在前台时才监视它。

6
所有前台服务都持有唤醒锁吗?例如,音乐应用程序持有部分唤醒锁。所有前台服务都是这样吗? - Basher51

2
我曾经遇到过完全相同的需求和问题。我认为解决方案是同时使用部分唤醒锁和前台服务。Android 会尽量避免杀死持有唤醒锁的后台服务,但在需要资源时可能会杀死它,并可能稍后重启。这对于许多目的来说都很好,但至少在我的情况下是不够好的。将服务置于前台状态是告诉 Android 不应该杀死它的方法。是的,在极端情况下仍可能发生,但现在这将违反 API 合同,而使用后台服务时 Android 可以自由地将其杀死。因此,您应该编写代码,仿佛那永远不会发生,但只要知道这是一个可能性,但可能很少发生的错误。

2
所有前台服务都持有唤醒锁吗?例如,音乐应用程序持有部分唤醒锁。所有前台服务也是这种情况吗? - Basher51

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接